import sys, os
import json
from enum import Enum
from dataclasses import dataclass, field

class TW_Cli_Output(Enum):
    TEXT = "TEXT"
    JSON = "JSON"

@dataclass
class TW_Cli_Args:
    name:str
    nullable:bool = False
    desription:str|None = None
    defaultValue:any = None

@dataclass
class TW_Cli_Command:
    name:str
    description:str|None= None
    args:list[TW_Cli_Args] = field(default_factory=lambda:[])
    output:TW_Cli_Output = field(default_factory=lambda:TW_Cli_Output.TEXT)

    def execute(self, args:object):
        return 
    
    def outputError(self, message:str|object = None):
        if message is not None:
            if self.output == TW_Cli_Output.JSON:
                jsonOutput = message if type(message) == object else {'message':message}
                jsonOutput['status'] = 'error'

                sys.stderr.write(json.dumps(jsonOutput))
            else:
                sys.stderr.write(message)

        sys.exit(-1)
        return
    
    def outputSuccess(self, message:str|object = None):
        if message is not None:
            if self.output == TW_Cli_Output.JSON:
                jsonOutput = message if type(message) == object else {'message':message}
                jsonOutput['status'] = 'success'

                sys.stdout.write(json.dumps(jsonOutput))
            else:
                sys.stdout.write(message)

        sys.exit(0)
        return