# Script para estandarizar objetos derivados de osBase
# Ejecutar desde la raíz del proyecto CtrEditor

Write-Host "=== Estandarización de Objetos osBase ===" -ForegroundColor Green

# Mapeo de nombres de clase mejorados
$nombresClase = @{
    # Transportes
    "ucTransporteTTop" = "Transporte TTOP"
    "ucTransporteTTopDualInverter" = "Transporte TTOP Dual Inverter"
    "ucTransporteGuias" = "Transporte con Guías"
    "ucTransporteGuiasUnion" = "Transporte con Guías Unión"
    "ucTransporteCurva" = "Transporte Curva"
    "ucTransporteCurvaGuias" = "Transporte Curva con Guías"
    
    # Sensores
    "ucPhotocell" = "Fotocélula"
    "ucGearEncoder" = "Encoder de Engranaje"
    "ucEncoderMotor" = "Encoder Motor"
    "ucEncoderMotorLineal" = "Encoder Motor Lineal"
    "ucSensTemperatura" = "Sensor de Temperatura"
    "ucBoton" = "Botón"
    
    # Actuadores
    "ucVMmotorSim" = "Motor VetroMeccanica"
    "ucValvulaFluido" = "Válvula de Fluido"
    
    # Elementos Estáticos
    "ucGuia" = "Guía"
    "ucDescarte" = "Descarte"
    
    # Emuladores
    "ucBottGenerator" = "Generador de Botellas"
    "ucFiller" = "Llenadora"
    "ucTanque" = "Tanque"
    
    # Señales
    "ucAnalogTag" = "Tag Analógico"
    "ucBoolTag" = "Tag Digital"
    "ucConsensGeneric" = "Consenso Genérico"
    
    # Datos
    "ucExtraccionTag" = "Extracción de Tag"
    "ucBuscarCoincidencias" = "Búsqueda de Coincidencias"
    
    # Decorativos
    "ucCustomImage" = "Imagen Personalizada"
    "ucFramePlate" = "Marco"
    "ucTextPlate" = "Placa de Texto"
    
    # Fluidos
    "ucTuberiaFluido" = "Tubería de Fluido"
    "osSistemaFluidos" = "Sistema de Fluidos"
    
    # Trazas
    "ucTrace3" = "Traza 3 Puntos"
    "ucTraceSimple" = "Traza Simple"
    
    # Dinámicos
    "ucBotella" = "Botella"
    "ucBotellaCuello" = "Botella con Cuello"
    
    # Ejemplo
    "ucBasicExample" = "Ejemplo Básico"
}

# Mapeo de categorías estándar
$categoriasEstandar = @{
    "Id:" = "Identificación"
    "Layout:" = "Posición y Tamaño"
    "Setup:" = "Configuración"
    "Simulation:" = "Simulación"
    "PLC link:" = "Enlace PLC"
    "Debug:" = "Información"
    "Encoder:" = "Encoder"
    "General:" = "Identificación"
}

function Actualizar-NombreClase {
    param(
        [string]$archivo,
        [string]$nuevoNombre
    )
    
    $contenido = Get-Content $archivo -Raw
    $patron = 'return\s+"[^"]*";'
    $reemplazo = "return `"$nuevoNombre`";"
    
    if ($contenido -match $patron) {
        $contenido = $contenido -replace $patron, $reemplazo
        Set-Content $archivo $contenido -NoNewline
        Write-Host "✓ Actualizado NombreClase en $archivo" -ForegroundColor Yellow
    }
}

function Estandarizar-Categorias {
    param([string]$archivo)
    
    $contenido = Get-Content $archivo -Raw
    $modificado = $false
    
    foreach ($categoria in $categoriasEstandar.Keys) {
        $patron = [regex]::Escape("Category(`"$categoria`")")
        $reemplazo = "Category(`"$($categoriasEstandar[$categoria])`")"
        
        if ($contenido -match $patron) {
            $contenido = $contenido -replace $patron, $reemplazo
            $modificado = $true
        }
    }
    
    if ($modificado) {
        Set-Content $archivo $contenido -NoNewline
        Write-Host "✓ Estandarizadas categorías en $archivo" -ForegroundColor Cyan
    }
}

# Buscar todos los archivos .cs en ObjetosSim
$archivos = Get-ChildItem -Path "ObjetosSim" -Filter "*.cs" -Recurse | Where-Object { 
    $_.Name -like "uc*.cs" -or $_.Name -like "os*.cs" 
}

Write-Host "Encontrados $($archivos.Count) archivos para procesar" -ForegroundColor Blue

foreach ($archivo in $archivos) {
    $nombreArchivo = [System.IO.Path]::GetFileNameWithoutExtension($archivo.Name)
    
    # Actualizar nombre de clase si está en el mapeo
    if ($nombresClase.ContainsKey($nombreArchivo)) {
        Actualizar-NombreClase -archivo $archivo.FullName -nuevoNombre $nombresClase[$nombreArchivo]
    }
    
    # Estandarizar categorías
    Estandarizar-Categorias -archivo $archivo.FullName
}

Write-Host "=== Proceso completado ===" -ForegroundColor Green
Write-Host "Revise los cambios y verifique que la compilación sea exitosa" -ForegroundColor Yellow 