# `main.py`

## Scopo

`main.py` è il punto di ingresso dell’applicazione desktop. Inizializza il loop asincrono condiviso, crea il client database condiviso e costruisce il launcher con i pulsanti che aprono i moduli operativi.

## Flusso principale

            flowchart TD
        A["Avvio di main.py"] --> B["Configura policy asyncio su Windows"]
        B --> C["Ottiene loop globale con get_global_loop()"]
        C --> D["Imposta il loop come default"]
        D --> E["Costruisce DSN SQL Server"]
        E --> F["Crea AsyncMSSQLClient condiviso"]
        F --> G["Istanzia Launcher"]
        G --> H["Mostra finestra principale"]
        H --> I{"Click su un pulsante"}
        I --> J["open_reset_corsie_window()"]
        I --> K["open_layout_window()"]
        I --> L["open_celle_multiple_window()"]
        I --> M["open_search_window()"]
        I --> N["open_pickinglist_window()"]

## Schema di chiamata

            flowchart LR
        Launcher["Launcher.__init__"] --> Reset["open_reset_corsie_window"]
        Launcher --> Layout["open_layout_window"]
        Launcher --> Ghost["open_celle_multiple_window"]
        Launcher --> Search["open_search_window"]
        Launcher --> Pick["open_pickinglist_window"]
        Pick --> PickFactory["create_pickinglist_frame"]

## Note

- `db_app` viene creato una sola volta e poi passato a tutte le finestre.

- Alla chiusura del launcher viene chiamato `db_app.dispose()` sul loop globale.

- `open_pickinglist_window()` costruisce la finestra in modo nascosto e la rende visibile solo a layout pronto, per ridurre lo sfarfallio iniziale.