#!/usr/bin/env python3
# This file is placed in the Public Domain.
# pylint: disable=R,C,W,C0302


"""Court. Prosecutor. Reconsider OTP-CR-117/19."""


__version__ = "116"


## import


import atexit
import importlib
import os
import readline
import rlcompleter
import signal
import sys
import termios
import threading
import time
import traceback


sys.path.insert(0, os.getcwd())


from genocide.hdl import Callback, Command, Event, Handler, parse
from genocide.obj import Class, Object, Wd, keys, last, printable, update
from genocide.obj import find, fntime, items, save, update
from genocide.hdl import command, scan, scandir
from genocide.utl import elapsed, wait


from genocide import cmds, irc, mdl, rss


## define


Wd.workdir = os.path.expanduser("/var/lib/genocide/")


starttime = time.time()


scan(cmds)
scan(irc)
scan(mdl)
scan(rss)


## class


class CLI(Handler):

    @staticmethod
    def announce(txt):
        CLI.raw(txt)

    @staticmethod
    def raw(txt):
        cprint(txt)

    def say(self, channel, txt):
        self.raw(txt)


## utiltiy


def daemon():
    pid = os.fork()
    if pid != 0:
        os._exit(0)
    os.setsid()
    os.umask(0)
    sis = open("/dev/null", 'r')
    sos = open("/dev/null", 'a+')
    ses = open("/dev/null", 'a+')
    os.dup2(sis.fileno(), sys.stdin.fileno())
    os.dup2(sos.fileno(), sys.stdout.fileno())
    os.dup2(ses.fileno(), sys.stderr.fileno())


def hup(_sig, _frame):
    print("signal 15 called")
    sys.stdout.flush()


## command


def ver(event):
    event.reply("GENOCIDE %s" % __version__)


## runtime


signal.signal(signal.SIGHUP, hup)


if __name__ == "__main__":
    daemon()
    Command.add(ver)
    irc.init()
    mdl.init()
    rss.init()
    wait()
