#!/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


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


from nixt.config  import Config
from nixt.console import Console
from nixt.errors  import errors
from nixt.persist import Persist, skel
from nixt.main    import cmnd, enable, init, scan
from nixt.parse   import parse
from nixt.utils   import forever, modnames, spl


from nixt import modules


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


Cfg         = Config()
Cfg.name    = Config.__module__.rsplit(".", maxsplit=1)[-2]
Cfg.mod     = "cmd,mod,thr,err"
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
    mods = modnames(modules, MODS)
    Cfg.mod = ",".join(mods)
    if Cfg.dis:
        Cfg.mod = ",".join(set(mods) - set(spl(Cfg.dis)))
    readline.redisplay()
    enable(print)
    skel()
    scan(Cfg.mod, modules, MODS)
    csl = Console(print, input)
    if "i" in Cfg.opts:
        init(Cfg.mod, modules,MODS)
    csl.start()
    cmnd(Cfg.otxt, print)
    forever()


def wrapped():
    "wrap main function."
    wrap(main)


if __name__ == "__main__":
    wrapped()
