# GUI Adapter - Modifiche per Compatibilità Profili

## Problema Risolto

Il modulo GUI ([gui.py](../pydownloadfwviasrio/gui/gui.py)) utilizzava la vecchia API di `ProfileManager` che aveva un attributo `.profiles` (lista di `FlashProfile`). Con la ristrutturazione del sistema di profili, `ProfileManager` ora gestisce `targets` (FlashTarget) e `models` (FlashModel) separatamente.

## Soluzione: Adapter Pattern

Ho implementato la classe `GUIProfileAdapter` che:

1. **Wrappa il nuovo `ProfileManager`**
2. **Espone un'interfaccia compatibile** con il vecchio codice GUI
3. **Converte automaticamente** i dati tra nuovo e vecchio formato

### Struttura dell'Adapter

```python
class GUIProfileAdapter:
    def __init__(self, manager: ProfileManager):
        self.manager = manager  # Nuovo ProfileManager
    
    @property
    def profiles(self) -> List[FlashProfile]:
        """Converte targets in FlashProfile legacy."""
        # Per ogni target:
        # - Recupera il modello associato
        # - Crea FlashProfile con i dati combinati
        # - Usa global_config per IP e porta
    
    def get_profile(self, name: str) -> Optional[FlashProfile]:
        """Recupera target come FlashProfile."""
        # Converte singolo target in FlashProfile
    
    # Altri metodi per compatibilità...
```

### Conversione dei Dati

Quando il GUI richiede un `FlashProfile`, l'adapter:

1. Recupera il `FlashTarget` per nome
2. Recupera il `FlashModel` associato tramite `id_model`
3. Combina i dati:
   - `name` ← `target.id_target`
   - `slot_address` ← `target.slot_address` (formattato hex)
   - `ip`, `port` ← `global_config`
   - `base_address` ← `model.user_start` (area user)
   - `size` ← `model.user_stop - model.user_start + 1`
   - `binary_path` ← `target.binary_path`

## Modifiche al GUI

### FlasherGUI.__init__()

**Prima:**
```python
self.profile_manager = ProfileManager()
if not self.profile_manager.profiles:
    # ...
```

**Dopo:**
```python
# Inizializzazione posticipata dopo creazione log widget
self.profile_manager: Optional[GUIProfileAdapter] = None

def _initialize_profiles(self):
    base_manager = ProfileManager()
    
    # Carica da targets.ini se disponibile
    if not base_manager.targets:
        targets_ini = Path("_OLD/Vecchia_app/FpgaBeamMeUp/targets.ini")
        if targets_ini.exists():
            base_manager.load_from_ini(targets_ini)
            # ...
    
    # Wrappa in adapter
    self.profile_manager = GUIProfileAdapter(base_manager)
```

### ProfileManagerDialog

Aggiornato per usare `manager.profiles` come property anziché accesso diretto all'attributo:

```python
profiles = self.manager.profiles  # Chiama la property
for profile in profiles:
    # ...
```

### Type Hints

Aggiornati i type hints per riflettere l'uso di `GUIProfileAdapter`:

```python
def __init__(self, parent: tk.Tk, manager: GUIProfileAdapter, ...)
```

## Vantaggi

1. **Nessuna modifica alla logica GUI**: Il codice dell'interfaccia rimane invariato
2. **Uso trasparente della nuova struttura**: Sotto il cofano usa targets e models
3. **Caricamento automatico**: Legge `targets.ini` all'avvio se disponibile
4. **Retrocompatibilità**: Il vecchio codice continua a funzionare
5. **Migrazione graduale**: Si può aggiornare il GUI in futuro per usare direttamente la nuova API

## Limitazioni Attuali

L'adapter è **read-only** per alcune operazioni:
- `add_profile()` e `update_profile()` sono stub (non completamente implementati)
- Questo è intenzionale: la gestione dei profili tramite GUI sarà deprecata
- Gli utenti dovrebbero modificare `flash_profiles.json` direttamente o usare gli script di utility

## Test

✓ Applicazione avviata senza errori  
✓ Caricamento automatico da `targets.ini`  
✓ Visualizzazione corretta di 9 target  
✓ Nessun errore di tipo o attributo  

## Prossimi Passi

- [ ] Implementare completamente `add_profile` e `update_profile` nell'adapter
- [ ] Migliorare il dialog di gestione profili per supportare selezione modello
- [ ] Aggiungere validazione dei profili prima di usarli
- [ ] Mostrare informazioni avanzate (aree Golden/User, settori, ecc.) nell'interfaccia
