#!/usr/bin/env python

from sys import argv, path
from pathlib import Path
from os import getcwd
from os.path import splitext
from importlib import import_module
from thunderlight import Server, gimme


def help():
    print('\nLaunch the thunderlight server.\n\nUsage: thunderlight [app] [port] [flags]\n\nArguments:\n    app         (optional) the module and object to load.\n    port        (optional) the port to listen.\n\nFlags:\n    --dev/-d    Run in dev mode.\n\nExamples:\n    (1) thunderlight app 5000\n    (2) thunderlight app:app\n    (3) thunderlight\n    (4) thunderlight app 5000 --dev\n')


def version():
    print("0.2.0")


def launch(args: list[str], dev: bool):
    if len(args) == 0:
        args.append('app')
    if len(args) == 1:
        args.append('5000')
    if ':' in args[0]:
        file = args[0].split(':')[0]
        obj: str | None = args[0].split(':')[1]
    else:
        file = args[0]
        obj = None
    dest = Path(getcwd())
    app_file = dest / file
    path.append(str(dest))
    result = import_module(splitext(app_file.name)[0], str(dest)).__dict__
    if result and result.get(obj or 'app'):
        app = result[obj or 'app']
    else:
        app = gimme()
    port = int(args[1])
    server = Server(app, port)
    server.listen()


if __name__ == '__main__':
    args = argv[1:]
    if '--help' in args or '-h' in args:
        help()
    elif '--version' in args or '-v' in args:
        version()
    else:
        dev = False
        if '--dev' in args:
            args.remove('--dev')
            dev = True
        if '-d' in args:
            args.remove('-d')
            dev = True
        launch(args, dev)
