#!/usr/bin/env python
# -*- coding: utf-8 -*-

import argparse
import signal
from pubsublogger import subscriber


def signal_handler(signal, frame):
    if subscriber.pubsub is not None:
        subscriber.stop()
        print("Subscriber closed.")

signal.signal(signal.SIGINT, signal_handler)

if __name__ == '__main__':

    parser = argparse.ArgumentParser(description='Configure a logging subscriber.')

    parser.add_argument("-H", "--hostname", default='localhost',
                        type=str, help='Set the hostname of the server.')
    parser.add_argument("-p", "--port", default=6379,
                        type=int, help='Set the server port.')
    parser.add_argument('-s', '--use_unix_socket',  action='store_true',
                        help='Use a unix socket path instead of a tcp socket.')
    parser.add_argument("--unix_socket_path", default='/tmp/redis.sock',
                        type=str, help='Unix socket path.')
    parser.add_argument("-c", "--channel",
                        type=str, required=True, help='Channel to subscribe to.')
    parser.add_argument("-l", "--log_path",
                        required=True, help='Path where the logs will be written')
    parser.add_argument("-d", "--debug", action="store_true",
                        help='Also log debug messages.')
    parser.add_argument("-m", "--mail", type=str, default=None,
                        help='Path to the config file used to send errors by email.')
    parser.add_argument("--syslog", action='store_true',
                        help='Enable syslog.')
    parser.add_argument("-sf", "--syslog_facility", type=str, default='user',
                        choices=['auth', 'authpriv', 'cron', 'daemon', 'ftp', 'kern', 'lpr', 'mail', 'news', 'syslog', 'user', 'uucp', 'local0', 'local1', 'local2', 'local3', 'local4', 'local5', 'local6', 'local7'],
                        help='Syslog facility.')
    parser.add_argument("-sl", "--syslog_level", type=str, default='WARNING',
                        choices=['DEBUG', 'INFO', 'NOTICE', 'WARNING', 'ERROR', 'CRITICAL'],
                        help='Syslog log level.')
    parser.add_argument("-ss", "--syslog_server", type=str, default=None,
                        help='Host of the syslog server.')
    parser.add_argument("-sp", "--syslog_port", type=int, default=514,
                        help='Port of the syslog server.')

    parser.set_defaults(syslog=False)
    args = parser.parse_args()

    if args.use_unix_socket:
        subscriber.unix_socket = args.unix_socket_path
    else:
        subscriber.hostname = args.hostname
        subscriber.port = args.port
    if args.syslog_server and args.syslog_port:
        syslog_address = (args.syslog_server, int(args.syslog_port))
    else:
        syslog_address = None

    subscriber.run(args.channel, args.log_path, args.debug, args.mail, args.syslog, syslog_address, args.syslog_facility, args.syslog_level)
