# PROMPT CHATGPT — GÉNÉRATION DE [chapitre].js
# Devoirati — Générateurs PDF

---

## CONTEXTE

Je construis un système de génération de بطاقات تمارين PDF pour le collège tunisien.
Deux fichiers fixes existent déjà et sont chargés AVANT ton fichier :

- `/assets/css/style.css` — tout le design (ne pas toucher)
- `/assets/js/engine.js`  — tout le moteur (ne pas toucher)

`engine.js` met à disposition :
- Fonctions utilitaires : `rnd(a,b)`, `rndN(lvl)`, `digitSum(n)`, `shuffle(arr)`, `esc(str)`
- Constantes : `CLS_AR`, `LVL_AR`, `LETTERS`
- Fonctions moteur : `renderExo()`, `buildPage()`, `buildCorrPage()`, `buildDvHeader()`, `generate()`, `printPDF()`, `downloadHTML()`, `engineInit(cfg)`
- Variables globales (NE PAS redéclarer) : `curCls`, `curLvl`, `curType`, `fmts`, `opts`, `pages`, `logoDataURL`

## TA MISSION

Génère **un seul fichier JS** : `[chapitre].js`
Ce fichier doit contenir exactement 6 blocs, dans cet ordre.

---

## BLOC 1 — Couleurs accent

```js
window.CHAPTER_ACCENT = {
  orange   : '#COULEUR',      // couleur principale hex
  orange2  : '#COULEUR2',     // couleur secondaire hex
  orangeRgb: 'R,G,B'         // valeurs RGB de orange (ex: '124,58,237')
};
```

Choix selon chapitre :
- Algèbre/Nombres  → `#d4580a` / `#f39c12` / `212,88,10`
- Expressions/Éqs  → `#7c3aed` / `#a78bfa` / `124,58,237`
- Géométrie        → `#0a6d8e` / `#17a2b8` / `10,109,142`
- Fractions        → `#1a7a3e` / `#27ae60` / `26,122,62`
- Puissances       → `#c0392b` / `#e74c3c` / `192,57,43`
- Statistiques     → `#6a0dad` / `#9b59b6` / `106,13,173`

---

## BLOC 2 — Données du chapitre

```js
var SUBJECT_LABEL = '[nom court arabe]';  // apparaît dans pieds de page

var REF_TABLE = {
  head: ['العمود1','العمود2','العمود3'],   // 2 ou 3 colonnes
  rows: [
    ['symbole/concept', 'règle en arabe', 'exemple'],
    // max 10 lignes
  ]
};
```

---

## BLOC 3 — Clés et générateurs

```js
var TYPE_KEYS = ['c1','c2',…];   // une clé par type

function genC1(lvl){ … }         // lvl = 1, 2 ou 3
function genC2(lvl){ … }
// …

var GENS = { c1:genC1, c2:genC2, … };
```

### Structure OBLIGATOIRE de l'objet retourné par chaque genCN() :
```js
{
  type    : 'c1',       // string
  q       : '…',        // question COMPLÈTE EN ARABE
  ok      : true/false, // boolean
  rep     : '…',        // réponse courte max 30 chars
  justif  : '…',        // justification avec ✓/✗/⟹
  hint    : '…',        // indice court en arabe
  wrongSol: '…'|null,   // solution fausse pédagogique (null si impossible)

  // Optionnel — force le format "عنصر ناقص" :
  _forceFmt  : 'manq',
  manqDisplay: '…',     // HTML avec <span class="manq-sq"></span>
}
```

### Niveaux :
- `lvl=1` → 1 règle, petits nombres
- `lvl=2` → 1-2 étapes
- `lvl=3` → multi-étapes, pièges, cas limites

### `wrongSol` = erreur pédagogique réaliste, jamais `''`

---

## BLOC 4 — Options QCM

```js
function buildQCMOpts(data){
  // retourne EXACTEMENT 4 strings mélangées avec shuffle()
  // data.rep est toujours l'une des 4 (la bonne)
  // les 3 autres = distracteurs plausibles en arabe
}
```

---

## BLOC 5 — Boutons du menu (HTML string)

```js
var TYPE_BUTTONS =
  '<button class="type-btn on" id="t-c1" onclick="setType(\'c1\')">'+
    '<span class="ticon">➕</span>'+
    '<span class="tlabel">ن-1 — [nom du type en arabe]</span>'+
    '<span class="tbadge">[badge court]</span>'+
  '</button>'+
  // … un bouton par type …
  '<button class="type-btn" id="t-mix" onclick="setType(\'mix\')" '+
    'style="border-color:rgba(26,188,156,.4);color:rgba(26,188,156,.7);">'+
    '<span class="ticon">🎯</span>'+
    '<span class="tlabel">مختلط — كل الأنواع</span>'+
    '<span class="tbadge">موصى به</span>'+
  '</button>';
```

Règles :
- Ids : `t-c1`, `t-c2`, …, `t-mix`
- Premier bouton : `class="type-btn on"`, les autres `class="type-btn"`
- Bouton mix **obligatoire en dernier**

---

## BLOC 6 — Initialisation (dernière ligne du fichier)

```js
engineInit({
  title      : '[nom du chapitre en arabe]',
  subtitle   : 'بطاقات تمارين PDF',
  docTitle   : 'بطاقة تمارين — [nom]',
  critLabel  : 'جدول [nom] (مرجع)',
  typeButtons: TYPE_BUTTONS,
  mainTitle  : 'معاينة بطاقات تمارين [nom]',
  mainSub    : 'ستظهر هنا بطاقات تمارين [description courte]…',
  emptyText  : 'ستظهر هنا بطاقات [nom] جاهزة للطباعة'
});
```

---

## RÈGLES ABSOLUES

- ❌ Ne pas redéclarer : `curCls`, `curLvl`, `curType`, `fmts`, `opts`, `pages`, `logoDataURL`
- ❌ Ne pas redéfinir : `rnd`, `shuffle`, `esc`, `generate`, `buildPage`, etc.
- ❌ Pas de `<style>`, pas de `<script>`, pas de HTML — fichier JS pur
- ✅ Tout le texte des questions en arabe
- ✅ `wrongSol` = erreur que font vraiment les élèves, jamais vide
- ✅ `buildQCMOpts()` retourne toujours exactement 4 éléments

## CONTRAINTES PROGRAMME TUNISIEN
- 7e : pas de racines carrées, équations 2nd degré, vecteurs
- 8e : pas de notion hors programme supprimée, translations, vecteurs
- 9e : pas de dérivées, intégrales, logarithmes

---

## CHECKLIST AVANT DE SOUMETTRE

- [ ] `TYPE_KEYS` = ids des boutons = clés de `GENS`
- [ ] Chaque `genCN()` retourne tous les champs obligatoires
- [ ] `wrongSol` jamais `''`
- [ ] `buildQCMOpts()` retourne exactement 4 éléments
- [ ] Dernière ligne = `engineInit({…})`
- [ ] Aucune variable globale du moteur redéclarée

---

## FORMAT DE RÉPONSE

Donne-moi **uniquement le fichier JS complet**, sans explication autour.
Commence directement par `window.CHAPTER_ACCENT = {` et termine par `});`.

---

## DÉMARRAGE

**Chapitre :** [NOM EN ARABE]
**Classes :** [7e / 8e / 9e]
**Sous-types :** [liste ou "à toi de proposer"]
**Erreurs typiques des élèves :** [description]
