# Ajout des types PCI dans la configuration

## Contexte

Lors de l'import de périphériques PCI, les champs `type_principal` et `sous_type` n'étaient pas pré-remplis dans le formulaire car le type "PCI" n'était pas défini dans la configuration.

## Modifications apportées

### 1. Configuration YAML - `peripheral_types.yaml`

Ajout de 9 nouveaux types de périphériques PCI avec leurs caractéristiques spécifiques:

#### Types PCI ajoutés

1. **pci_ssd_nvme** - SSD NVMe (PCI)
   - Capacité (Go)
   - Interface (NVMe, PCIe 3.0/4.0/5.0)
   - Facteur de forme (M.2 2280/2260/2242, PCIe AIC, U.2)
   - Vitesses lecture/écriture (MB/s)
   - PCI Device ID

2. **pci_carte_graphique** - Carte graphique
   - Modèle GPU
   - VRAM (Go)
   - Interface (PCIe 3.0/4.0/5.0 x16)
   - TDP (W)
   - Ports de sortie
   - PCI Device ID
   - **Fabricant carte** (extrait du subsystem)

3. **pci_carte_reseau_ethernet** - Carte réseau Ethernet (PCI)
   - Vitesse (10 Mbps → 100 Gbps)
   - Nombre de ports
   - Interface (PCI, PCIe x1/x4/x8/x16)
   - PCI Device ID

4. **pci_carte_wifi** - Carte WiFi (PCI)
   - Norme Wi-Fi (Wi-Fi 4 → Wi-Fi 7)
   - Bandes (2.4 GHz, 5 GHz, dual/tri-band)
   - Débit max (Mbps)
   - Bluetooth intégré
   - Interface (PCIe x1, M.2 2230/2242)
   - PCI Device ID

5. **pci_carte_son** - Carte son (PCI)
   - Canaux (2.0, 2.1, 5.1, 7.1)
   - Qualité audio
   - Interface (PCI, PCIe x1)
   - PCI Device ID

6. **pci_controleur_usb** - Contrôleur USB (PCI)
   - Nombre de ports
   - Version USB (2.0 → 4.0)
   - Interface (PCIe x1/x4)
   - PCI Device ID

7. **pci_controleur_sata** - Contrôleur SATA (PCI)
   - Nombre de ports
   - Version SATA (I/II/III)
   - Support RAID
   - Interface (PCI, PCIe x1/x4)
   - PCI Device ID

8. **pci_controleur_raid** - Contrôleur RAID (PCI)
   - Nombre de ports
   - Niveaux RAID supportés
   - Cache (MB)
   - Interface (PCIe x4/x8/x16)
   - PCI Device ID

9. **pci_autre** - Autre périphérique PCI
   - Classe de périphérique
   - Interface (PCI, PCIe x1/x4/x8/x16)
   - PCI Device ID

### 2. Frontend JavaScript - `peripherals.js`

#### Ajout du type principal "PCI"

```javascript
peripheralTypes = [
    'USB', 'Bluetooth', 'PCI', 'Réseau', 'Stockage', 'Video', 'Audio',
    'Câble', 'Quincaillerie', 'Console', 'Microcontrôleur'
];
```

#### Ajout des sous-types PCI

```javascript
'PCI': [
    'SSD NVMe',
    'Carte graphique',
    'Carte réseau Ethernet',
    'Carte WiFi',
    'Carte son',
    'Contrôleur USB',
    'Contrôleur SATA',
    'Contrôleur RAID',
    'Autre'
]
```

## Mapping avec la classification automatique

Les types définis dans le YAML correspondent aux classifications automatiques effectuées par le PCI Classifier:

| Classification automatique | Type YAML | Sous-type YAML |
|---------------------------|-----------|----------------|
| `("PCI", "SSD NVMe")` | `PCI` | `SSD NVMe` |
| `("PCI", "Carte graphique")` | `PCI` | `Carte graphique` |
| `("PCI", "Carte réseau Ethernet")` | `PCI` | `Carte réseau Ethernet` |
| `("PCI", "Carte WiFi")` | `PCI` | `Carte WiFi` |
| `("PCI", "Carte son")` | `PCI` | `Carte son` |
| `("PCI", "Contrôleur USB")` | `PCI` | `Contrôleur USB` |
| `("PCI", "Contrôleur SATA")` | `PCI` | `Contrôleur SATA` |
| `("PCI", "Contrôleur RAID")` | `PCI` | `Contrôleur RAID` |
| `("PCI", "Autre")` | `PCI` | `Autre` |

## Caractéristiques spécifiques PCI

Toutes les définitions PCI incluent le champ `pci_device_id` qui stocke l'identifiant vendor:device (ex: `10de:2504` pour NVIDIA RTX 3060).

Ce champ est automatiquement rempli lors de l'import PCI via `lspci -n`.

### Champs supplémentaires pour GPU

Les cartes graphiques ont un champ supplémentaire `fabricant_carte` pour distinguer:
- **Marque**: Fabricant du GPU (NVIDIA, AMD, Intel)
- **Fabricant**: Fabricant de la carte (Gigabyte, ASUS, MSI, etc.)

Ce champ est extrait automatiquement du subsystem lors de l'import PCI.

## Exemple de pré-remplissage

Lors de l'import d'un **NVIDIA GeForce RTX 3060** via lspci:

### Données détectées
```json
{
  "type_principal": "PCI",
  "sous_type": "Carte graphique",
  "nom": "NVIDIA GeForce RTX 3060 Lite Hash Rate",
  "marque": "NVIDIA",
  "modele": "GeForce RTX 3060 Lite Hash Rate",
  "fabricant": "Gigabyte",
  "pci_device_id": "10de:2504"
}
```

### Formulaire pré-rempli
- **Type principal**: `PCI` ✅
- **Sous-type**: `Carte graphique` ✅
- **Nom**: `NVIDIA GeForce RTX 3060 Lite Hash Rate`
- **Marque**: `NVIDIA`
- **Modèle**: `GeForce RTX 3060 Lite Hash Rate`
- **Fabricant carte**: `Gigabyte`

### Caractéristiques spécifiques suggérées
```json
{
  "pci_device_id": "10de:2504",
  "slot": "08:00.0",
  "device_class": "VGA compatible controller",
  "vendor_name": "NVIDIA Corporation",
  "subsystem": "Gigabyte Technology Co., Ltd Device 4074",
  "driver": "nvidia",
  "iommu_group": "16",
  "revision": "a1",
  "modules": "nvidia"
}
```

## Bénéfices

✅ **Type principal pré-rempli**: Plus besoin de sélectionner manuellement "PCI"
✅ **Sous-type pré-rempli**: Classification automatique (GPU, NVMe, Ethernet, etc.)
✅ **Caractéristiques adaptées**: Formulaire adapté au type de périphérique
✅ **PCI Device ID stocké**: Identifiant unique pour chaque périphérique
✅ **Fabricant carte pour GPU**: Distinction chipset vs carte

## API de configuration

Les types sont chargés via l'endpoint `/api/peripherals/config/types` qui lit le fichier YAML.

En cas d'échec de l'API, le frontend utilise les types hardcodés en fallback.

## Tests

Pour tester le pré-remplissage:

1. Importer un périphérique PCI (ex: carte graphique)
2. Vérifier que le formulaire affiche:
   - Type principal: `PCI`
   - Sous-type: `Carte graphique` (ou autre selon le périphérique)
3. Vérifier que les caractéristiques spécifiques sont pré-remplies

## Fichiers modifiés

1. **config/peripheral_types.yaml** - Ajout des 9 types PCI
2. **frontend/js/peripherals.js** - Ajout du type "PCI" et ses sous-types

## Conclusion

Le type "PCI" est maintenant complètement intégré dans la configuration, permettant un import fluide des périphériques PCI avec pré-remplissage automatique des types et sous-types.
