#!python
from colp import Color,HSV,HEX,RGB,by_name,detect_normalised
HSI=HSD=HSB=HSV
import argparse
import code
import os.path as op
import readline
import sys
import random
import time
banner = """
\033[95m┌─┐┌─┐┬  ┬─┐
\033[92m│  │ ││  │─┘
\033[93m└─┘┘─┘┆─┘┆   \x1b[6;30;42mthe color processor\x1b[0m
"""
if __name__ == '__main__': 
    parser = argparse.ArgumentParser(prog='colp' , description='Color Processor')
    parser.add_argument('-n'                     , '--no-banner'                  , action='store_true'                       , help='don\'t show  banner on interactive mode')
    parser.add_argument('-v'                     , '--visualizer'                 , action='store_true'                       , help='visualize current color processed')
    parser.add_argument('-c'                     , '--css-mode'                   , action='store_true'                       , help='css-compliant output')
    parser.add_argument('-s'                     , '--scripting-mode'             , action='store_true'                       , default=True                                    , help='colp script output, which can be reinterpreted by colp')
    # parser.add_argument('-d'                   , '--debug'                      ,                                           , help='stop ')
    parser.add_argument('-l'                     , '--load-script'                , metavar='SCRIPT_FILE'                     , help='load script from file or stdin')
    parser.add_argument('-N'                     , '--named-constants'   , nargs='*'   , metavar='[HTML | X11 | BOTH]'             , help='use named constants when one is being processsed. Choose either HTML, X11 or BOTH')
    parser.add_argument('VAR'                    , nargs='*'                      , help='arbitrary python code execution')

    args = parser.parse_args()

    readlines = lambda filename: (sys.stdin if filename == '-' else open(filename, 'r')).\
            readlines()

    colors = by_name() # make sure to load before processing any script
    for c_name,c_var in colors.items():
        locals()[c_name] = c_var

    def sleep(n):
        Color.visualizer.update
        time.sleep(n)

    Color.MODE = 'css' if args.css_mode else 'script'

    if args.named_constants is not None:
        Color.USE_CONSTANT_SPEC = 'BOTH' if args.named_constants == [] else args.named_constants 

    for c in args.VAR:
        exec(c)
    
    if args.load_script:
        exec(''.join(readlines(args.load_script)))

    is_tty = sys.stdin.isatty()

    if args.visualizer:
        import tkinter as tk 
        Color.visualizer = tk.Tk() 
        Color.visualizer.title('colp')

    def readfunc(prompt):
        return input('> ' if is_tty else '')

    if not args.load_script:
        if float(sys.version[:3]) >= 3.6 and not 'dev' in sys.version:
            code.interact(banner='' if args.no_banner or not is_tty else banner, \
                    local=globals().update(locals()) or globals(), \
                    readfunc=readfunc, \
                    exitmsg='')
        else:
            code.interact(banner='' if args.no_banner or not is_tty else banner, \
                    local=globals().update(locals()) or globals(), \
                    readfunc=readfunc)
