#!/usr/bin/env python3

# to override print <= can be a big problem with exceptions
from __future__ import print_function  # must be 1st
import builtins

import sys
import os
from fire import Fire

from cmd_ai.version import __version__
from cmd_ai import unitname
from cmd_ai import config
from cmd_ai.api_key import get_api_key
from cmd_ai.syscom import process_syscom
from cmd_ai.g_askme import g_askme

from cmd_ai import topbar
from cmd_ai import key_enter
import time
import datetime as dt
from console import fg, bg, fx

from openai import OpenAI


from prompt_toolkit import prompt
from prompt_toolkit import PromptSession
from prompt_toolkit.history import FileHistory


def display_response(res):
    print(fg.yellow, res, fg.default)


def main(cmd="", debug=False):
    """Main function of the project"""

    # ======== DEFINE THE CONFIG FILE HERE ========

    config.CONFIG["filename"] = "~/.config/cmd_ai/cfg.json"
    config.load_config()

    if config.CONFIG["api_key"] is None:
        res = get_api_key()
        if res is not None:
            config.CONFIG["api_key"] = res
            res = input("> save api_key to config?   y/n")
            if res == "y":
                print(config.CONFIG["api_key"])
                config.save_config()
            else:
                print(" ... not now ...")

    config.tokens = 0
    config.started_task = dt.datetime.now()
    config.started_total = dt.datetime.now()

    config.PYSCRIPT = "/tmp/gpt_code.py"
    config.PYSCRIPT_EXISTS = False

    config.client = OpenAI(api_key=get_api_key())
    config.myPromptSession = PromptSession(
        history=FileHistory(os.path.expanduser("~/.cmd_ai.history"))
    )

    # config.load_config()
    # config.save_config()

    if cmd == "usage":
        print(
            """ ... usage:
                _
        """
        )
        sys.exit(0)
    # else:
    #    unitname.func()

    models = config.client.models.list()
    mids = []
    for i in models.data:
        if i.id.find("gpt") >= 0:
            mids.append(i.id)
    for i in sorted(mids):
        print("   ", i)

    print("                            ", fg.cyan, ".h for help", fg.default)
    if cmd == "":
        while True:
            SYSCOM = False
            inp = config.myPromptSession.prompt("> ")

            # print(  len(inp) , f"/{inp[0]}/")

            if inp.strip() == "":
                continue
            if len(inp) > 0 and len(inp) < 5 and inp[0] == ".":
                # System command .... root style ...
                SYSCOM = True
                print(fg.orange, inp)
            else:
                print(fg.white, inp)
            print(fg.default)

            if SYSCOM:
                process_syscom(inp)
            else:
                res = g_askme(inp, model="gpt-4-1106-preview")

                display_response(res)

    else:
        g_askme(demand, model="gpt-4-1106-preview")


# ====================================================================

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