# Configurazione AIFileProcessor - Download File Remoti

## Panoramica

Lo scheduler `AIFileProcessor` ora supporta due modalità di accesso ai file:

1. **Accesso Diretto (Locale)**: Il file si trova sulla stessa macchina dello scheduler
2. **Download Remoto (FTP)**: Il file viene scaricato tramite FTP da un server remoto

## Modalità Accesso Diretto (Default)

Se lo scheduler e i file sono sulla stessa macchina, non serve configurare nulla di particolare.
I file vengono letti direttamente dal path salvato in `file_upload.fu_path`.

## Modalità Download Remoto

### Quando usarla

Usa questa modalità quando:
- Lo scheduler gira su una macchina diversa da quella dove sono salvati i file
- Il server remoto ha un servizio FTP abilitato

### Parametri di Configurazione

Per abilitare il download remoto tramite FTP, aggiungi questi parametri alla configurazione dello scheduler:

```xml
<parameter name="ftp_host">ftp://192.168.1.100</parameter>
<parameter name="ftp_username">ftpuser</parameter>
<parameter name="ftp_password">ftppassword</parameter>
<parameter name="ftp_temp_folder">C:\Temp\AIFiles</parameter>
<parameter name="ftp_base_path">/var/www/html/assets</parameter> <!-- Opzionale -->
```

#### Descrizione Parametri

| Parametro | Descrizione | Esempio |
|-----------|-------------|---------|
| `ftp_host` | Host FTP del server remoto (può omettere ftp://) | `ftp://192.168.1.100` o `192.168.1.100` |
| `ftp_username` | Username FTP | `scheduler_user` |
| `ftp_password` | Password FTP | `password123` |
| `ftp_temp_folder` | Cartella locale dove salvare i file temporanei | `C:\Temp\AIFiles` |
| `ftp_base_path` | **Opzionale**: Path base da rimuovere (corrisponde alla home directory FTP) | `/var/www/html/assets` |

**Nota su ftp_base_path**: Se l'utente FTP ha una home directory (es: `/var/www/html/assets`) e i path nel database includono questo prefisso (es: `/var/www/html/assets/temp/file.pdf`), specifica il base path qui. Il sistema rimuoverà automaticamente questo prefisso per accedere al file corretto via FTP (`/temp/file.pdf`).

### Requisiti Server FTP

Il server remoto deve:
- Avere un servizio FTP attivo e accessibile
- Avere le stesse cartelle/struttura dei path salvati nel database
- Esempio: Se nel DB c'è `C:\Files\document.pdf`, l'FTP deve avere `/Files/document.pdf`

### Configurazione Server FTP Windows

Su Windows Server, puoi abilitare FTP tramite IIS:

1. Installa il ruolo FTP Server tramite "Aggiungi ruoli e funzionalità"
2. Crea un sito FTP in IIS Manager
3. Configura le credenziali FTP (utente/password)
4. Imposta i permessi di lettura sulla cartella dei file
5. Apri la porta 21 nel firewall (e porte passive se necessario)

### Flusso di Funzionamento

1. **Connessione FTP**: Lo scheduler si connette al server FTP con le credenziali configurate
2. **Download File**: Per ogni file da elaborare:
   - Converte il path Windows in path FTP (es: `C:\Files\doc.pdf` → `ftp://server/Files/doc.pdf`)
   - Scarica il file tramite FTP
   - Salva il file in una cartella temporanea locale
3. **Elaborazione AI**: Il file temporaneo viene elaborato normalmente
4. **Pulizia**: Il file temporaneo viene eliminato dopo l'elaborazione
5. **Pulizia Periodica**: File temporanei più vecchi di 24 ore vengono eliminati automaticamente

### Esempio Configurazione Completa

```xml
<schedule>
  <name>AIFileProcessor</name>
  <class>KondorCS.ScheduleLibrary.AIFileProcessor.AIFileProcessor</class>
  <parameters>
    <parameter name="ConnDB">Host=localhost;Database=mydb;Username=user;Password=pass</parameter>
    <parameter name="ai_url">http://ai-service:5000/process</parameter>
    <parameter name="debug">true</parameter>
    <parameter name="pt_id">1</parameter>
    <parameter name="user_id">123</parameter>

    <!-- Parametri per download FTP remoto (opzionali) -->
    <parameter name="ftp_host">192.168.1.100</parameter>
    <parameter name="ftp_username">ftpuser</parameter>
    <parameter name="ftp_password">SecurePassword123!</parameter>
    <parameter name="ftp_temp_folder">C:\Temp\AISchedulerFiles</parameter>
    <parameter name="ftp_base_path">/var/www/html/assets</parameter> <!-- Opzionale -->
  </parameters>
</schedule>
```

### Esempio Caso d'Uso Reale

**Scenario**:
- Path nel database: `/var/www/html/assets/temp/pdf/40a5520b-cb6a-11f0-b7c9-216d5e85999f.jpg`
- Home directory utente FTP: `/var/www/html/assets`
- File sul server FTP (relativo alla home): `/temp/pdf/40a5520b-cb6a-11f0-b7c9-216d5e85999f.jpg`

**Configurazione corretta**:
```xml
<parameter name="ftp_host">192.168.1.100</parameter>
<parameter name="ftp_username">ftpuser</parameter>
<parameter name="ftp_password">password</parameter>
<parameter name="ftp_temp_folder">C:\Temp\AIFiles</parameter>
<parameter name="ftp_base_path">/var/www/html/assets</parameter>
```

**Cosa succede**:
1. Il sistema legge dal DB: `/var/www/html/assets/temp/pdf/file.jpg`
2. Rimuove il base path: `/temp/pdf/file.jpg`
3. Accede via FTP: `ftp://192.168.1.100/temp/pdf/file.jpg`
4. Il server FTP risolve il path relativo alla home dell'utente

### Note Importanti

1. **Sicurezza**:
   - Usa FTPS (FTP over SSL/TLS) in produzione se possibile
   - Proteggi il file di configurazione con permessi adeguati
   - Non usare l'utente Administrator per FTP

2. **Cartella Temporanea**:
   - Viene creata automaticamente se non esiste
   - Deve avere permessi di scrittura per l'utente che esegue lo scheduler
   - I file vengono eliminati automaticamente dopo l'elaborazione
   - Pulizia automatica ogni 24 ore per file vecchi

3. **Struttura Path**:
   - Il path nel database deve corrispondere alla struttura FTP
   - Il drive letter (C:, D:) viene automaticamente rimosso
   - Esempio: `C:\Files\doc.pdf` diventa `ftp://server/Files/doc.pdf`

4. **Performance**:
   - Il download avviene prima dell'elaborazione AI
   - Timeout download: 2 minuti
   - Usa modalità binaria per tutti i file

5. **Gestione Errori**:
   - Se il download fallisce, lo stato viene impostato su "errore"
   - Il file temporaneo viene eliminato anche in caso di errore
   - Verifica i log per dettagli sugli errori FTP

## Log

Quando `debug=true`, lo scheduler stampa informazioni dettagliate:

```
[AI] Modalità download remoto FTP abilitata
[FTP] Configurazione FTP: Host=ftp://192.168.1.100, User=ftpuser
[FTP] Base path da rimuovere: /var/www/html/assets
[AI] Download FTP del file fu_id=244 da: /var/www/html/assets/temp/pdf/file.jpg
[FTP] Rimosso base path: /var/www/html/assets
[FTP] Path convertito: /var/www/html/assets/temp/pdf/file.jpg -> ftp://192.168.1.100/temp/pdf/file.jpg
[FTP] Download file da: ftp://192.168.1.100/temp/pdf/file.jpg
[FTP] File scaricato con successo: C:\Temp\AIFiles\fu_244_guid.jpg (234567 bytes)
[AI] Elaborazione completata per fu_id=244
[FTP] File temporaneo eliminato: C:\Temp\AIFiles\fu_244_guid.jpg
[FTP] Pulizia completata: 5 file temporanei eliminati
```

## Troubleshooting

### Errore "Connection refused" o "Unable to connect"

- Verifica che il servizio FTP sia attivo sul server remoto
- Controlla che l'host sia raggiungibile (ping)
- Verifica che la porta 21 sia aperta nel firewall
- Prova a connetterti con un client FTP (FileZilla) per testare

### Errore "530 Login incorrect" o autenticazione fallita

- Verifica username e password FTP
- Controlla che l'utente FTP abbia i permessi corretti
- Verifica che l'utente non sia disabilitato
- Controlla i log del server FTP per dettagli

### Errore "550 File not found" o "550 Failed to open file"

Questo è l'errore più comune e può avere diverse cause:

1. **Path non corrisponde alla home directory FTP**:
   - Se vedi nel log `[FTP WARNING] Il path '...' non inizia con il base path '...'`
   - Verifica che `ftp_base_path` corrisponda esattamente alla home directory FTP
   - Esempio: se l'home FTP è `/var/www/html/assets`, usa questo come `ftp_base_path`

2. **Path nel database non include il base path**:
   - Se il path nel DB è già relativo (es: `/temp/file.pdf`)
   - NON configurare `ftp_base_path` oppure configuralo vuoto

3. **File effettivamente non esiste**:
   - Connettiti con FileZilla usando le stesse credenziali
   - Naviga manualmente per verificare che il file esista
   - Verifica maiuscole/minuscole nei nomi dei file (Linux è case-sensitive)

4. **Permessi FTP insufficienti**:
   - Verifica che l'utente FTP abbia permessi di lettura sulla cartella
   - Controlla i log del server FTP per dettagli sui permessi negati

### File temporanei non vengono eliminati

- Verifica i permessi sulla cartella temporanea locale
- Controlla i log per eventuali errori durante la pulizia
- I file più vecchi di 24 ore vengono eliminati automaticamente

### Errore "File fisico non trovato"

In modalità locale, questo errore indica che il path in `fu_path` non è valido.
Passa alla modalità download FTP remoto configurando i parametri FTP.

### Timeout durante il download

- Aumenta il timeout nella configurazione se possibile
- Verifica la velocità della connessione di rete
- Controlla se ci sono problemi di banda sul server FTP
- Considera l'uso di FTP passivo se ci sono problemi con i firewall
