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


"main"


import os
import readline
import sys
import termios
import time


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


from sbn.cfg    import Config
from sbn.errors import errors
from sbn.disk   import Persist, skel
from sbn.main   import cmnd, enable, init, scan
from sbn.parse  import parse
from sbn.term   import Console
from sbn.utils  import forever, modnames
 

from sbn import modules, user


if os.path.exists("mods"):
    import mods as MODS
else:
    MODS = None


Cfg         = Config()
Cfg.dis     = ""
Cfg.mod     = "cmd,mod,thr,err"
Cfg.opts    = ""
Cfg.name    = "sbn"
Cfg.wdr     = os.path.expanduser(f"~/.{Cfg.name}")
Cfg.pidfile = os.path.join(Cfg.wdr, f"{Cfg.name}.pid")


Persist.workdir = Cfg.wdr


def wrap(func):
    "reset terminal."
    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()


def main():
    "main"
    parse(Cfg, " ".join(sys.argv[1:]))
    Cfg.dis = Cfg.sets.dis
    Cfg.mod += "," + ",".join(modnames(modules, user, MODS))
    readline.redisplay()
    enable(print)
    skel()
    if "v" in Cfg.opts:
        dte = " ".join(time.ctime(time.time()).replace("  ", " ").split()[1:])
        modiess = ",".join([x.upper() for x in modnames(modules, user, MODS)])
        print(f'{dte} {Cfg.name.upper()} {Cfg.opts.upper()} {modiess}'.replace("  ", " "))
    scan(Cfg.mod, modules, user, MODS)
    csl = Console(print, input)
    if "i" in Cfg.opts:
        init(Cfg.mod, modules, user, MODS)
    csl.start()
    cmnd(Cfg.otxt, print)
    forever()


if __name__ == "__main__":
    wrap(main)
