"""WebDrop Bridge - Application entry point."""

import sys

from PySide6.QtWidgets import QApplication

from webdrop_bridge.config import Config, ConfigurationError
from webdrop_bridge.ui.main_window import MainWindow
from webdrop_bridge.utils.logging import get_logger, setup_logging


def main() -> int:
    """Main application entry point.

    Initializes configuration, logging, and creates the main window.
    Returns appropriate exit code.

    Returns:
        int: Exit code (0 for success, non-zero for error)
    """
    try:
        # Load configuration from file if it exists, otherwise from environment
        config_path = Config.get_default_config_path()
        if config_path.exists():
            config = Config.from_file(config_path)
        else:
            config = Config.from_env()

        # Set up logging
        log_file = None
        if config.log_file:
            log_file = config.log_file

        setup_logging(
            name="webdrop_bridge",
            level=config.log_level,
            log_file=log_file,
        )

        logger = get_logger(__name__)
        logger.info(f"Starting {config.app_name} v{config.app_version}")
        logger.debug(f"Configuration: {config}")

    except ConfigurationError as e:
        print(f"Configuration error: {e}", file=sys.stderr)
        return 1
    except Exception as e:
        print(f"Failed to initialize logging: {e}", file=sys.stderr)
        return 1

    try:
        # Create Qt application
        app = QApplication(sys.argv)

        # Create and show main window
        window = MainWindow(config)
        window.show()

        logger.info("Main window opened successfully")
        
        # Check for updates on startup (non-blocking, async)
        window.check_for_updates_startup()

        # Run event loop
        return app.exec()

    except Exception as e:
        logger.exception(f"Unhandled exception: {e}")
        return 1


if __name__ == "__main__":
    sys.exit(main())
