# frozen_string_literal: true # ⚠️ [DEPRECATED] Este módulo está en desuso. # Filosofia actual: DB-First. Ver ./adn/tools/run db # Más información: adn/README.md require 'optparse' require_relative '../core/colores' require_relative '../core/validador' class SubcomandoValidador def initialize(args, logger) @args = args @logger = logger @opciones = { watch: false, fix: false } end def ejecutar parser = OptionParser.new do |opts| opts.banner = "Uso: ./adn/tools/run validador [OPCIONES]" opts.separator "" opts.separator "Valida el cumplimiento del ADN en las bitácoras" opts.separator "" opts.separator "Opciones:" opts.on("--watch", "Monitorizar cambios en tiempo real") do @opciones[:watch] = true end opts.on("--fix", "Intentar corregir errores automáticamente") do @opciones[:fix] = true end opts.on("-h", "--help", "Mostrar esta ayuda") do puts opts exit end end begin parser.parse!(@args) rescue OptionParser::InvalidOption => e @logger.error("Opción inválida: #{e.message}") puts parser exit 1 end @logger.info("Iniciando validador del ADN", @opciones) if @opciones[:watch] @logger.info("Modo watch activado (no implementado aún)") puts "#{Color::YELLOW}⚠ El modo watch será implementado en Fase 1 completa#{Color::RESET}" # TODO: Implementar con gem 'listen' end # Inicializar validador validador = ADN::Validador.new(nil, @logger) # Ejecutar validación resultados = validador.validar_bitacoras(@opciones) # Mostrar resultados mostrar_resultados(resultados, validador) end private def mostrar_resultados(resultados, validador) total = resultados[:total] validas = resultados[:validas] con_errores = resultados[:con_errores] con_advertencias = resultados[:con_advertencias] puts "\n#{Color::CYAN}📊 Resultados de validación:#{Color::RESET}" puts "#{Color::DIM}#{'-' * 60}#{Color::RESET}" puts " #{Color::GREEN}Bitácoras totales:#{Color::RESET} #{total}" puts " #{Color::GREEN}Válidas:#{Color::RESET} #{validas}" if con_errores > 0 puts " #{Color::RED}Con errores:#{Color::RESET} #{con_errores}" else puts " #{Color::GREEN}Con errores:#{Color::RESET} 0" end if con_advertencias > 0 puts " #{Color::YELLOW}Con advertencias:#{Color::RESET} #{con_advertencias}" else puts " #{Color::GREEN}Con advertencias:#{Color::RESET} 0" end # Mostrar detalles de errores y advertencias mostrar_detalles(resultados[:detalles]) # Resumen final if con_errores == 0 && con_advertencias == 0 @logger.exito("Validación completada: #{total} bitácoras OK") puts "#{Color::GREEN}✓ Todas las bitácoras cumplen con el formato del ADN#{Color::RESET}" elsif con_errores == 0 @logger.advertencia("Validación completada con advertencias") puts "#{Color::YELLOW}⚠ Validación completada con #{con_advertencias} advertencia(s)#{Color::RESET}" else @logger.error("Validación completada con errores") puts "#{Color::RED}✗ Validación completada con #{con_errores} error(es) y #{con_advertencias} advertencia(s)#{Color::RESET}" end # Log de métricas @logger.info("Validación completada", { total_bitacoras: total, validas: validas, con_errores: con_errores, con_advertencias: con_advertencias, correcciones: validador.correcciones }) end def mostrar_detalles(detalles) detalles.each do |detalle| archivo = detalle[:archivo] errores = detalle[:errores] advertencias = detalle[:advertencias] next if errores.empty? && advertencias.empty? puts "\n#{Color::DIM}#{archivo}#{Color::RESET}" errores.each do |error| puts " #{Color::RED}✗ #{error}#{Color::RESET}" end advertencias.each do |advertencia| puts " #{Color::YELLOW}⚠ #{advertencia}#{Color::RESET}" end end end end