"""Punto de entrada principal de la aplicación.""" import argparse import sys from pathlib import Path ROOT_DIR = Path(__file__).parent.resolve() if not getattr(sys, "frozen", False): sys.path.insert(0, str(ROOT_DIR)) # Bootstrap y ODBC antes de importar módulos que usan pyodbc from app.config.bootstrap import ensure_runtime_layout from app.config.odbc_setup import configure_odbc_environment ensure_runtime_layout() configure_odbc_environment() from PySide6.QtWidgets import QApplication from PySide6.QtCore import Qt from app.config import get_launch_options, initialize_env, is_panel_configured from app.ui.main_window import MainWindow from app.utils.logger import app_logger def parse_args(argv: list[str] | None = None) -> argparse.Namespace: parser = argparse.ArgumentParser(description="CloudRestoreAS") parser.add_argument( "--minimized", action="store_true", help="Inicia minimizado en la bandeja del sistema", ) parser.add_argument( "--start-engine", action="store_true", help="Inicia el motor de restauración automáticamente", ) return parser.parse_args(argv) def main(): """Función principal.""" args = parse_args() launch = get_launch_options() initialize_env() minimized = args.minimized or launch.minimized panel_ok = is_panel_configured() start_engine = args.start_engine or launch.start_engine app_logger.info("=" * 80) app_logger.info("CloudRestoreAS - Iniciando aplicación") app_logger.info(f"Directorio app: {ROOT_DIR}") if minimized: app_logger.info("Modo: ventana oculta (--minimized o START_MINIMIZED)") else: app_logger.info("Modo: ventana visible; cerrar minimiza a bandeja") if start_engine: app_logger.info("Modo: motor auto-inicio") if not panel_ok: app_logger.warning( "Servicio PANEL_BASES_ANEXO24 no configurado en config/.env — " "complete CLOUDRESTORE_PANEL_* para enrutamiento automático." ) app_logger.info("=" * 80) app = QApplication(sys.argv) app.setApplicationName("CloudRestoreAS") app.setOrganizationName("Aduanasoft") app.setAttribute(Qt.ApplicationAttribute.AA_EnableHighDpiScaling) app.setQuitOnLastWindowClosed(False) try: window = MainWindow( minimized=minimized, start_engine=start_engine, panel_configured=panel_ok, ) if not minimized: window.show() app_logger.info("Ventana principal mostrada") else: app_logger.info("Ventana oculta; icono en bandeja del sistema") exit_code = app.exec() app_logger.info(f"Aplicación finalizada con código: {exit_code}") sys.exit(exit_code) except Exception as e: app_logger.critical(f"Error fatal en la aplicación: {e}", exc_info=True) sys.exit(1) if __name__ == "__main__": main()