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