"""Utilidades compartidas para build8bp."""

import os
import sys
from pathlib import Path
import click
from rich.console import Console
from rich.text import Text

console = Console()

# Variables de entorno por defecto
DEFAULT_ASM_PATH_ENV = "BP8_ASM_PATH"
DEFAULT_ABASM_PATH_ENV = "ABASM_PATH"


def get_asm_path(ctx_asm_path: str = None) -> Path:
    """Obtener ruta de los scripts ASM desde parámetro o variable de entorno."""
    if ctx_asm_path:
        return Path(ctx_asm_path)
    
    env_path = os.getenv(DEFAULT_ASM_PATH_ENV)
    if env_path:
        return Path(env_path)
    
    console.print("[red]Error: No se especificó la ruta de los scripts ASM[/red]")
    console.print(f"Usa --asm-path o define la variable de entorno {DEFAULT_ASM_PATH_ENV}")
    sys.exit(1)


def get_abasm_path(ctx_abasm_path: str = None) -> Path:
    """Obtener ruta de ABASM desde parámetro o variable de entorno."""
    if ctx_abasm_path:
        return Path(ctx_abasm_path)
    
    env_path = os.getenv(DEFAULT_ABASM_PATH_ENV)
    if env_path:
        return Path(env_path)
    
    console.print("[red]Error: No se especificó la ruta de ABASM[/red]")
    console.print(f"Usa --abasm-path o define la variable de entorno {DEFAULT_ABASM_PATH_ENV}")
    sys.exit(1)


class RichCommand(click.Command):
    """Comando personalizado con formato Rich."""
    
    def format_help(self, ctx, formatter):
        # Construir la línea de uso
        pieces = [ctx.command_path]
        
        # Agregar [OPTIONS] si hay parámetros opcionales
        if self.params:
            pieces.append("[OPTIONS]")
        
        usage_line = ' '.join(pieces)
        
        console.print("\n[bold yellow]Uso:[/bold yellow]")
        console.print(f"  {usage_line}\n")
        
        console.print(Text(self.help or "", style="bold green"))
        print()

        console.print("[bold yellow]Opciones:[/bold yellow]")
        for param in self.params:
            if param.help:
                console.print(f"  [bold cyan]{param.opts[0]}[/bold cyan] {param.help}")
        
        # Agregar ejemplos de uso si están disponibles
        if hasattr(self, 'examples') and self.examples:
            console.print("\n[bold yellow]Ejemplos:[/bold yellow]")
            for example in self.examples:
                console.print(f"  [dim]{example}[/dim]")
            console.print()
