"""Entrada para la interfaz gráfica. Crea el servicio con el extractor por defecto y lanza la ventana principal. """ import logging import customtkinter as ctk from application.service import InvoiceProcessingService from application.strategies import OllamaExtractor from gui.view import InvoiceAppView from gui.controller import AppController from application.logging_config import configure_logging from application.config import settings def main(): """Inicializa logging y arranca la aplicación GUI.""" configure_logging() # Log effective settings *after* logging is configured _cfg_logger = logging.getLogger("application.config") try: _cfg_logger.info( "effective_api_settings", extra={ "component": "config", "base_url": settings.api.base_url, "model": settings.api.model, "timeout_s": getattr(settings.api, "request_timeout_s", None), }, ) except Exception: pass extractor = OllamaExtractor( api_key=settings.api.api_key, base_url=settings.api.base_url, model=settings.api.model ) from application.batch_processor import BatchProcessor from application.estimator import Estimator service = InvoiceProcessingService( extractor, batch_processor_factory=lambda s: BatchProcessor(s), estimator_factory=lambda s: Estimator(s) ) app = InvoiceAppView() AppController(app, service) app.mainloop() if __name__ == "__main__": main()