#!/usr/bin/env python3
# This file is placed in the Public Domain.
# pylint: disable=C0413,W0212,W0611


"console"


import os
import readline
import sys
import termios
import time


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


from rssbot.errors  import errors
from rssbot.main    import Broker, Client, Config, Event, command, debug
from rssbot.main    import enable, forever, initer, modnames, parse, spl
from rssbot.modules import face
from rssbot.object  import Default
from rssbot.runtime import launch


Cfg = Config()


class Console(Client):

    "Console"

    def callback(self, evt):
        "wait for result."
        Client.callback(self, evt)
        evt._thr.join()

    def poll(self):
        "poll console and create event."
        evt      = Event()
        evt.orig = repr(self)
        evt.txt  = input("> ")
        evt.type = "command"
        return evt

    def raw(self, txt):
        "print text."
        print(txt)


def banner():
    "show banner."
    tme = time.ctime(time.time()).replace("  ", " ")
    debug(f"{Cfg.name.upper()} since {tme}")


def wrap(func):
    "reset console."
    old3 = None
    try:
        old3 = termios.tcgetattr(sys.stdin.fileno())
    except termios.error:
        pass
    try:
        func()
    except (KeyboardInterrupt, EOFError):
        print("")
    finally:
        if old3:
            termios.tcsetattr(sys.stdin.fileno(), termios.TCSADRAIN, old3)
    errors(print)


def main():
    "main"
    parse(Cfg, " ".join(sys.argv[1:]))
    if "v" in Cfg.opts:
        enable(print)
        banner()
    if "i" in Cfg.opts:
        Cfg.mod = ",".join(modnames(face))
        for thr in initer(Cfg.mod, face):
            thr.join()
    csl = Console()
    csl.start()
    forever()


def wraps():
    "Wrap main."
    wrap(main)
    errors(print)


if __name__ == "__main__":
    wraps()
    