# Debug delle API PHP in VS Code con Docker

Queste istruzioni permettono di fare debug delle API PHP servite con Docker direttamente da Visual Studio Code.

## Prerequisiti

- Docker Desktop installato e in esecuzione
- Visual Studio Code
- Estensione PHP per VS Code

## 1. Configurazione del progetto

Il progetto contiene già i file necessari per il debug:

- `.docker/php/Dockerfile` - container PHP con Xdebug
- `docker-compose.yml` - configurazione Docker
- `.vscode/launch.json` - configurazione di avvio VS Code
- `.vscode/settings.json` - impostazioni VS Code

Il container espone:

- **porta `8000`** per HTTP
- **porta `9003`** per Xdebug

## 2. Avvia il container

Dalla root del progetto esegui:

```bash
docker compose up --build
```

Il server PHP sarà disponibile su:

```text
http://localhost:8000
```

## 3. Avvia il debug in VS Code

1. Apri la sezione **Run and Debug** in VS Code (Ctrl+Shift+D)
2. Seleziona la configurazione: **Debug PHP in Docker**
3. Premi **F5** per avviare il debugger

## 4. Imposta un breakpoint e testa

1. Aggiungi un breakpoint in un controller, ad esempio:

    ```text
    src/Api/Controllers/V1/UsersController.php
    ```

2. Richiama un endpoint tramite browser:

   ```text
    http://localhost:8000/api/users
    ```

3. Oppure usa curl con il trigger Xdebug:

    ```bash
    curl -H "XDEBUG_TRIGGER: 1" http://localhost:8000/api/users
    ```

Il debugger dovrebbe fermarsi sul breakpoint e permetterti di ispezionare le variabili.

## 5. Risoluzione dei problemi

### VS Code non si ferma sul breakpoint

- Verifica che Xdebug sia abilitato nel container
- Controlla che la configurazione `client_host` nel Dockerfile punti a `host.docker.internal`
- Verifica che la porta 9003 sia disponibile e non bloccata dal firewall

### Il container non si avvia

- Assicurati che Docker Desktop sia in esecuzione
- Verifica che le porte 8000 e 9003 non siano già in uso
- Controlla i log di Docker per errori specifici

### "Failed to fetch" dalle richieste del frontend

- Verifica che il frontend abbia il CORS correttamente configurato
- Controlla che `allowed_origins` in `config/config.php` includa l'origine del frontend
- Testa con l'endpoint di diagnostica `/cors-check`

## Note

- La procedura di debug influisce solo sulla sessione VS Code, il server continua a funzionare normalmente
- È possibile debug con i breakpoint condizionali per limitare i fermi
- Usa la console di debug di VS Code per eseguire comandi PHP durante il debug
