# Système d'upload d'images pour les médicaments

## Architecture

### Backend (Symfony)

**Service FileUploader** (`src/Service/FileUploader.php`)
- Upload de fichiers avec génération de noms uniques
- Suppression de fichiers
- Stockage dans `public/uploads/drugs/`

**Controller** (`src/Controller/DrugImageController.php`)
- Route : `POST /api/drugs/upload-image`
- Validation : types MIME autorisés (jpeg, png, gif, webp)
- Taille max : 5MB
- Retourne : `{ success: true, fileName: "drugs/nom-unique.jpg", url: "/uploads/drugs/nom-unique.jpg" }`

**State Processors**
- `DrugsCreateProcessor` : Sauvegarde le chemin relatif en BDD
- `DrugsUpdateProcessor` : Supprime l'ancienne image si changement
- `DrugsDeleteProcessor` : Supprime l'image lors de la suppression du médicament

### Frontend (Next.js)

**Route proxy** (`app/api/drugs/upload-image/route.ts`)
- Transfère les uploads vers Symfony
- Gère l'authentification

**Composant DrugModal**
- Input file pour upload local
- Champ texte pour saisie d'URL externe
- Aperçu de l'image avant soumission
- Support upload + URL externes

**Helper getImageUrl()** (`lib/config.ts`)
- Construit automatiquement l'URL complète des images
- Support mobile (détection IP) et localhost
- Gère les URLs externes (https://)

## Utilisation

### Upload d'une image

1. L'utilisateur sélectionne une image via l'input file
2. L'image est immédiatement uploadée vers `/api/drugs/upload-image`
3. Le serveur Symfony retourne le chemin : `drugs/doliprane-abc123.jpg`
4. Ce chemin est stocké en BDD
5. À l'affichage, `getImageUrl()` construit l'URL complète

### URLs supportées

- **Upload local** : `drugs/medicament-abc123.jpg` → `http://192.168.1.28:8000/uploads/drugs/medicament-abc123.jpg`
- **URL externe** : `https://example.com/image.jpg` → inchangé

### Suppression automatique

Lors de la suppression d'un médicament ou lors du remplacement de son image, l'ancien fichier est automatiquement supprimé du disque (uniquement pour les fichiers locaux, pas les URLs externes).

## Configuration

- Répertoire d'upload : `API/public/uploads/drugs/`
- Paramètre Symfony : `%uploads_directory%` (défini dans `services.yaml`)
- Gitignore : Les images ne sont pas versionnées, seul `.gitkeep` l'est

## Mobile

Le système fonctionne automatiquement sur mobile via l'IP du PC :
- Upload : `http://192.168.1.28:3000/api/drugs/upload-image`
- Affichage : `http://192.168.1.28:8000/uploads/drugs/image.jpg`
