import sys
from rich.console import Console
from rich.table import Table
from rich.panel import Panel
from rich import print

console = Console()


#commands
from src.commands.create.create_project import create_project
from src.commands.delete.delete_project import delete_project
from src.commands.list.list_projects import list_projects
from src.commands.run.run_project import run_project
from src.commands.build.build_project import build_project

#utils
from src.globalt.utils.show_error import show_error

def display_help_command():
    console.print(Panel.fit("[bold blue]Discord Package - dcp help[/bold blue] 🚀", style="bold white"))
    table = Table(title="Comandos Disponibles", header_style="bold magenta", border_style="blue")
    table.add_column("Comando", style="bold cyan", justify="center")
    table.add_column("Descripción", style="bold green")
    table.add_row("dcp [bold]create[/bold] [project_name]", "Crea un nuevo proyecto.")
    table.add_row("dcp [bold]delete[/bold] [project_name]", "Elimina un proyecto existente.")
    table.add_row("dcp [bold]list[/bold]", "Muestra la lista de proyectos.")
    table.add_row("dcp [bold]run[/bold] [project_name]", "Ejecuta un proyecto.")
    table.add_row("dcp [bold]build[/bold]", "Construye el proyecto actual.")
    table.add_row("dcp [bold]help[/bold] o [bold]-h[/bold]", "Muestra este mensaje de ayuda.")
    console.print(table)
    console.print("[bold yellow]Ejemplo de uso:[/bold yellow] [italic green]dcp create MiProyecto[/italic green] 🚀")

def deploy_command(argv):
    try:
        if len(argv) < 2:
            show_error("No se ha especificado ningún comando.")
            return

        command = argv[1]

        if command in ["help", "-h"]:
            print("Ayuda")
            display_help_command()
            return

        # Comandos que requieren un argumento adicional
        if command in ["create", "delete", "run"]:
            if len(argv) < 3:
                show_error(f"El comando '{command}' requiere un argumento adicional.")
                return
            argument = argv[2]
            print(f"Comando: {command}")
            print(f"Argumento: {argument}")

            if command == "create":
                create_project(argument)
            elif command == "delete":
                delete_project(argument)
                print(f"\033[92mProyecto eliminado con éxito!\033[0m")
            elif command == "run":
                run_project(argument)
                print(f"\033[92mProyecto ejecutado con éxito!\033[0m")
            return

        # Comandos que NO requieren un argumento adicional
        if command == "list":
            print(f"Comando: {command}")
            list_projects()
            print(f"\033[92mLista de proyectos actualizada.\033[0m")
        elif command == "build":
            print(f"Comando: {command}")
            build_project()
            print(f"\033[92mProyecto construido con éxito!\033[0m")
        else:
            show_error("Error en comando")
            return

    except Exception as e:
        print("Error crítico en deploy, no te preocupes:")
        print(e)
        print(e.__traceback__)
        print("]------------------------------------------------",)


def main():
    deploy_command(sys.argv)

if __name__ == "__main__":
    main()
