"""
DSP Scanner — точка входа приложения.

Полный перенос функционала PowerShell-скрипта dspscanner.ps1 на Python
с модульной архитектурой и современным графическим интерфейсом (PySide6/Qt6).

Запуск:
    python main.py
"""
from __future__ import annotations

import sys
import traceback
from pathlib import Path

# Гарантируем, что пакет app/ доступен для импорта независимо от cwd
sys.path.insert(0, str(Path(__file__).resolve().parent))

from PySide6.QtCore import Qt
from PySide6.QtWidgets import QApplication, QMessageBox

from app.logging_utils import setup_logger
from app.gui.theme import apply_modern_theme
from app.gui.main_window import MainWindow


def main() -> int:
    try:
        QApplication.setHighDpiScaleFactorRoundingPolicy(
            Qt.HighDpiScaleFactorRoundingPolicy.PassThrough
        )
    except Exception:
        pass

    app = QApplication(sys.argv)
    app.setApplicationName("DSP Scanner")
    app.setOrganizationName("DSPScanner")

    apply_modern_theme(app)

    logger, qt_log_handler = setup_logger()
    logger.info("=== DSP Scanner запущен ===")

    def excepthook(exc_type, exc_value, exc_tb):
        text = "".join(traceback.format_exception(exc_type, exc_value, exc_tb))
        logger.critical("Необработанное исключение:\n%s", text)
        try:
            QMessageBox.critical(None, "Критическая ошибка", f"{exc_value}\n\nПодробности в журнале.")
        except Exception:
            pass

    sys.excepthook = excepthook

    window = MainWindow(logger=logger, qt_log_handler=qt_log_handler)
    window.show()
    return app.exec()


if __name__ == "__main__":
    raise SystemExit(main())
