// JammSanté Dentiste — données (Sénégal). Modèle clinique = (dent, surface).

// ---- Dentition FDI ----
const FDI = {
  perm: {
    ur: [18,17,16,15,14,13,12,11], ul: [21,22,23,24,25,26,27,28],
    lr: [48,47,46,45,44,43,42,41], ll: [31,32,33,34,35,36,37,38],
  },
  temp: {
    ur: [55,54,53,52,51], ul: [61,62,63,64,65],
    lr: [85,84,83,82,81], ll: [71,72,73,74,75],
  },
};
// une dent est antérieure (incisive/canine) => surface centrale = Incisal, sinon Occlusal
const isAnterior = (n) => { const d = n % 10; return d <= 3; };
const isUpper = (n) => { const q = Math.floor(n/10); return q===1||q===2||q===5||q===6; };

// ---- Légende des états / actes ----
// layer: 'ex' = existant (bleu), 'plan' = planifié (orange/teal)
const D_LEGEND = [
  { code:'sain', label:'Sain', color:'var(--d-tooth)', kind:'etat' },
  { code:'carie', label:'Carie', color:'#EF4444', kind:'diag' },
  { code:'obt', label:'Obturation (composite)', color:'#3B82F6', kind:'acte' },
  { code:'amalg', label:'Amalgame', color:'#64748B', kind:'acte' },
  { code:'couronne', label:'Couronne', color:'#F59E0B', kind:'acte' },
  { code:'endo', label:'Traitement canalaire', color:'#8B5CF6', kind:'acte' },
  { code:'implant', label:'Implant', color:'#0D9488', kind:'acte' },
  { code:'bridge', label:'Bridge (pilier/pontique)', color:'#0369A1', kind:'acte' },
  { code:'extraction', label:'Extraction indiquée', color:'#B91C1C', kind:'diag' },
  { code:'absente', label:'Dent absente', color:'#CBD5E1', kind:'etat' },
  { code:'fracture', label:'Fracture / fêlure', color:'#DB2777', kind:'diag' },
  { code:'sealant', label:'Scellement de sillon', color:'#10B981', kind:'acte' },
];
const LEG = Object.fromEntries(D_LEGEND.map(l => [l.code, l]));

// ---- Findings de Fatou Sow (double couche existant / planifié) ----
// s: surfaces concernées ; null = dent entière
const SEED_FINDINGS = [
  { tooth:16, s:['O'], code:'carie', layer:'plan', date:'2026-06-24', note:'Carie occlusale profonde, proche pulpaire, cliché rétro-alvéolaire à faire.' },
  { tooth:26, s:null, code:'couronne', layer:'ex', date:'2021-03-10', note:'Couronne céramo-métallique posée (labo Sédar).' },
  { tooth:36, s:['M','O'], code:'amalg', layer:'ex', date:'2018-11-02', note:'Amalgame MO ancien, marges correctes.' },
  { tooth:36, s:['O'], code:'endo', layer:'ex', date:'2019-05-14', note:'Traitement canalaire réalisé.' },
  { tooth:46, s:['O'], code:'carie', layer:'plan', date:'2026-06-24', note:'Carie occlusale, obturation composite planifiée.' },
  { tooth:11, s:['V'], code:'obt', layer:'plan', date:'2026-06-24', note:'Facette / composite esthétique demandé par la patiente.' },
  { tooth:38, s:null, code:'absente', layer:'ex', date:'2020-01-01', note:'Dent de sagesse absente (extraite).' },
  { tooth:48, s:null, code:'extraction', layer:'plan', date:'2026-06-24', note:'Incluse, mésio-angulaire, avulsion à programmer.' },
  { tooth:24, s:['M','O','D'], code:'obt', layer:'ex', date:'2022-09-01', note:'Composite MOD.' },
  { tooth:37, s:['O'], code:'sealant', layer:'ex', date:'2023-02-20', note:'Scellement préventif.' },
  { tooth:21, s:['M'], code:'carie', layer:'plan', date:'2026-06-24', note:'Carie proximale mésiale débutante.' },
];

// ---- Patient démo + liste ----
const D_PATIENTS = [
  { id:'p1', name:'Fatou Sow', age:34, sexe:'F', tel:'+221 76 980 11 22', dmn:'DEN-1187', assurance:'IPM Sonatel', groupe:'A Rh+',
    motif:'Douleur 16 + demande esthétique', tags:['Carie 16','Esthétique'], statut:'actif', heure:'09:00',
    solde:-45000, prochain:'Soin 16 · aujourd\u2019hui',
    alertes:[
      { t:'crit', code:'AVK', label:'Sous anticoagulant (AVK)', detail:'Fluindione, INR à contrôler avant tout geste sanglant. Dernier INR 2,8 (14/06).', act:'Reporter avulsion si INR > 3.' },
      { t:'crit', code:'allergie', label:'Allergie Pénicilline', detail:'Œdème documenté 2019. Éviter amoxicilline.', act:'Alternative : clindamycine / spiramycine.' },
      { t:'warn', code:'diabete', label:'Diabète type 2', detail:'HbA1c 7,4 %, cicatrisation ralentie, risque infectieux.', act:'Antibioprophylaxie à discuter.' },
    ],
    med:['Fluindione (Previscan)','Metformine 850 mg'], },
  { id:'p2', name:'Ousmane Diallo', age:41, sexe:'M', tel:'+221 77 123 45 67', dmn:'DEN-2241', assurance:'CSS', groupe:'O Rh+',
    motif:'Détartrage + bilan parodontal', tags:['Parodontite'], statut:'actif', heure:'10:00', solde:0, prochain:'Réévaluation paro · 15 juil',
    alertes:[{ t:'warn', code:'tabac', label:'Tabac 15 PA', detail:'Facteur de risque parodontal majeur.', act:'Conseil sevrage.' }], med:[] },
  { id:'p3', name:'Aïcha Ba', age:8, sexe:'F', tel:'+221 70 551 66 10', dmn:'DEN-0934', assurance:'Mutuelle', groupe:'B Rh+',
    motif:'Scellements + carie 85 (temporaire)', tags:['Pédo','Denture mixte'], statut:'actif', heure:'11:00', solde:0, prochain:'Scellement 36/46 · aujourd\u2019hui',
    alertes:[{ t:'crit', code:'drepano', label:'Drépanocytose (SS)', detail:'Risque de crise vaso-occlusive au stress/déshydratation.', act:'Séances courtes, gestion douleur, éviter stress.' }], med:['Acide folique','Pénicilline V (prophylaxie)'] },
  { id:'p4', name:'Mamadou Kane', age:58, sexe:'M', tel:'+221 76 220 55 14', dmn:'DEN-0588', assurance:'ASKIA', groupe:'AB Rh+',
    motif:'Prothèse adjointe - essayage', tags:['Prothèse'], statut:'actif', heure:'14:00', solde:-120000, prochain:'Essayage PAP · aujourd\u2019hui',
    alertes:[{ t:'crit', code:'biphos', label:'Bisphosphonates IV', detail:'Acide zolédronique (ostéoporose), risque d\u2019ostéonécrose (MRONJ) sur avulsion.', act:'Éviter chirurgie osseuse, avis spécialisé.' },{ t:'warn', code:'valvulo', label:'Valvulopathie', detail:'Prothèse valvulaire, antibioprophylaxie obligatoire avant geste sanglant.', act:'Amoxicilline 2 g 1h avant (ou clinda si allergie).' }], med:['Acide zolédronique','Acénocoumarol'] },
  { id:'p5', name:'Awa Ndiaye', age:29, sexe:'F', tel:'+221 77 442 19 88', dmn:'DEN-2009', assurance:'SUNU', groupe:'O Rh−',
    motif:'Contrôle + blanchiment', tags:['Esthétique'], statut:'actif', heure:'15:00', solde:0, prochain:'Blanchiment · 18 juil',
    alertes:[{ t:'warn', code:'grossesse', label:'Grossesse - 2e trimestre', detail:'Éviter radios non essentielles, reporter actes non urgents.', act:'Soins conservateurs OK, tablier plombé si cliché indispensable.' }], med:[] },
  { id:'p6', name:'Ibrahima Fall', age:47, sexe:'M', tel:'+221 70 339 88 47', dmn:'DEN-2310', assurance:'Aucune', groupe:'A Rh+',
    motif:'Urgence - pulpite 36', tags:['Urgence','Douleur'], statut:'urgence', heure:'—', solde:0, prochain:'Aujourd\u2019hui - walk-in',
    alertes:[], med:[] },
];

// ---- Charting parodontal (sondage 6 sites/dent) pour Ousmane (secteur affiché) ----
// pp = profondeur poche (mm) ×6 ; rec = récession ; bop = saignement (bool) ×6
const D_PERIO = {
  teeth: [16,15,14,13,12,11,21,22,23,24,25,26],
  rows: {
    16:{ pp:[4,5,6,3,4,3], rec:[1,1,2,0,1,0], bop:[1,1,1,0,1,0], mob:1 },
    15:{ pp:[3,3,4,2,3,3], rec:[0,0,1,0,0,0], bop:[0,1,1,0,0,0], mob:0 },
    14:{ pp:[3,2,3,3,3,2], rec:[0,0,0,0,0,0], bop:[0,0,0,0,0,0], mob:0 },
    13:{ pp:[2,2,3,2,2,2], rec:[0,0,0,1,0,0], bop:[0,0,0,0,0,0], mob:0 },
    12:{ pp:[3,3,4,3,3,3], rec:[1,0,1,0,0,0], bop:[0,0,1,0,0,0], mob:0 },
    11:{ pp:[3,4,4,3,3,3], rec:[1,1,1,0,0,0], bop:[0,1,1,0,0,0], mob:1 },
    21:{ pp:[3,4,5,3,3,3], rec:[0,1,2,0,0,0], bop:[0,1,1,0,1,0], mob:1 },
    22:{ pp:[3,3,4,3,3,3], rec:[0,0,1,0,0,0], bop:[0,0,1,0,0,0], mob:0 },
    23:{ pp:[2,2,3,2,2,2], rec:[0,0,0,0,0,0], bop:[0,0,0,0,0,0], mob:0 },
    24:{ pp:[3,3,4,3,3,3], rec:[0,0,1,0,0,0], bop:[0,0,0,0,0,0], mob:0 },
    25:{ pp:[3,4,4,3,4,3], rec:[0,1,1,0,1,0], bop:[0,1,1,0,1,0], mob:0 },
    26:{ pp:[5,6,7,4,5,4], rec:[1,2,2,1,1,1], bop:[1,1,1,1,1,1], mob:2 },
  },
  sites:['DV','V','MV','DL','L','ML'],
  prev:{ date:'12 mars 2026', mean:3.8, bop:34 },
  curr:{ date:'26 juin 2026', mean:3.3, bop:22 },
};

// ---- Plan de traitement phasé (lignes ancrées dent/surface) ----
const D_PLAN = [
  { phase:'Urgence / douleur', color:'#B91C1C', lines:[
    { tooth:16, s:'O', acte:'Coiffage + obturation provisoire', tarif:15000, statut:'planifie' },
  ]},
  { phase:'Assainissement', color:'#0369A1', lines:[
    { tooth:null, s:null, acte:'Détartrage complet (2 arcades)', tarif:20000, statut:'planifie' },
    { tooth:46, s:'O', acte:'Obturation composite', tarif:18000, statut:'planifie' },
    { tooth:21, s:'M', acte:'Obturation composite proximale', tarif:18000, statut:'planifie' },
    { tooth:48, s:null, acte:'Avulsion dent de sagesse incluse', tarif:35000, statut:'attente', note:'Reporter, INR à vérifier' },
  ]},
  { phase:'Prothétique', color:'#F59E0B', lines:[
    { tooth:16, s:'O', acte:'Traitement canalaire (si pulpe atteinte)', tarif:40000, statut:'conditionnel' },
    { tooth:16, s:null, acte:'Couronne céramique', tarif:90000, statut:'conditionnel' },
  ]},
  { phase:'Esthétique', color:'#8B5CF6', lines:[
    { tooth:11, s:'V', acte:'Facette composite', tarif:45000, statut:'planifie' },
  ]},
];

// ---- Assureurs Sénégal ----
const D_ASSUREURS = ['IPM Sonatel','CSS','ASKIA','AXA','SUNU','NSIA','SONAM','Mutuelle de santé'];

// ---- Agenda multi-fauteuils ----
const D_PRATICIENS = [
  { id:'dr1', name:'Dr. Seynabou Faye', role:'Chirurgien-dentiste', color:'#0D9488', fauteuil:'Fauteuil 1' },
  { id:'dr2', name:'Dr. Cheikh Sarr', role:'Chirurgien-dentiste', color:'#0369A1', fauteuil:'Fauteuil 2' },
  { id:'dr3', name:'Dr. Aïda Ndiaye', role:'Orthodontiste (vacataire)', color:'#8B5CF6', fauteuil:'Fauteuil 3 · mar/jeu' },
];
const D_RDV = [
  { h:'09:00', dur:60, fauteuil:0, patient:'Fatou Sow', acte:'Soin carie 16', tone:'teal', confirm:true },
  { h:'09:00', dur:30, fauteuil:1, patient:'Moussa Ba', acte:'Détartrage', tone:'sky', confirm:true },
  { h:'10:00', dur:45, fauteuil:1, patient:'Ousmane Diallo', acte:'Bilan parodontal', tone:'sky', confirm:false },
  { h:'10:00', dur:30, fauteuil:2, patient:'Rama Gueye', acte:'Contrôle ortho', tone:'violet', confirm:true },
  { h:'11:00', dur:45, fauteuil:0, patient:'Aïcha Ba', acte:'Scellements pédo', tone:'teal', confirm:true },
  { h:'11:30', dur:30, fauteuil:2, patient:'Sokhna Mbaye', acte:'Pose bagues', tone:'violet', confirm:false },
  { h:'14:00', dur:60, fauteuil:1, patient:'Mamadou Kane', acte:'Essayage prothèse', tone:'sky', confirm:true },
  { h:'15:00', dur:30, fauteuil:0, patient:'Awa Ndiaye', acte:'Contrôle', tone:'teal', confirm:true },
  { h:'15:30', dur:90, fauteuil:0, patient:'Walk-in urgence', acte:'Pulpite 36 - Ibrahima Fall', tone:'red', confirm:true },
];

// ---- Prothèse / labo ----
const D_LABO = [
  { id:'L1', patient:'Mamadou Kane', travail:'Prothèse adjointe partielle (résine)', labo:'Labo Sédar', teinte:'A3', envoye:'18 juin', retour:'28 juin', etat:'essayage', retard:false },
  { id:'L2', patient:'Fatou Sow', travail:'Couronne céramique 16', labo:'DentalCeram Dakar', teinte:'A2', envoye:'—', retour:'—', etat:'attente', retard:false, note:'Conditionné à l\u2019endo' },
  { id:'L3', patient:'Coumba Diop', travail:'Bridge 3 éléments 24-26', labo:'Labo Sédar', teinte:'A3.5', envoye:'10 juin', retour:'20 juin', etat:'pose', retard:false },
  { id:'L4', patient:'Modou Sy', travail:'Couronne zircone 46', labo:'DentalCeram Dakar', teinte:'B1', envoye:'05 juin', retour:'15 juin', etat:'reprise', retard:true, note:'Point de contact à reprendre' },
];

// ---- Imagerie ----
const D_IMAGES = [
  { id:'im1', type:'Rétro-alvéolaire', tooth:16, date:'24 juin 2026', proj:'Molaire sup. droite', note:'Image radioclaire occlusale proche de la corne pulpaire.' },
  { id:'im2', type:'Panoramique (OPG)', tooth:null, date:'20 juin 2026', proj:'Panoramique', note:'48 incluse mésio-angulaire. 38 absente.' },
  { id:'im3', type:'Photo intra-orale', tooth:11, date:'24 juin 2026', proj:'Secteur antérieur', note:'Coloration + micro-fracture amélaire 11.' },
  { id:'im4', type:'Rétro-alvéolaire', tooth:36, date:'19 mai 2019', proj:'Molaire inf. gauche', note:'Contrôle post-endo 36, obturation canalaire correcte.' },
];

// ---- Stock ----
const D_STOCK = [
  { article:'Composite A2 (seringue)', cat:'Restauration', qte:4, seuil:6, exp:'03/2027', tone:'amber' },
  { article:'Articaïne 4% adré 1/100000', cat:'Anesthésie', qte:22, seuil:15, exp:'11/2026', tone:'green' },
  { article:'Gants nitrile M (boîte)', cat:'Consommable', qte:3, seuil:8, exp:'—', tone:'red' },
  { article:'Fraises diamantées (assortiment)', cat:'Rotatif', qte:12, seuil:5, exp:'—', tone:'green' },
  { article:'Cônes gutta-percha', cat:'Endodontie', qte:2, seuil:4, exp:'08/2026', tone:'amber' },
  { article:'Fil de suture 3/0', cat:'Chirurgie', qte:9, seuil:5, exp:'01/2027', tone:'green' },
];

// ---- Transcription Jamm IA (consultation) ----
const D_TRANSCRIPT = [
  { who:'praticien', t:'Bonjour Fatou, alors cette dent en haut à droite, ça vous fait mal quand ?' },
  { who:'patient', t:'Surtout quand je bois froid, et depuis deux jours ça lance un peu le soir.' },
  { who:'praticien', t:'D\u2019accord. Je regarde la 16… il y a une carie occlusale assez profonde. On va faire une radio.' },
  { who:'patient', t:'C\u2019est grave docteur ? Je prends mon anticoagulant, il faut que je vous dise.' },
  { who:'praticien', t:'Vous avez bien fait. On ne touche pas au sang aujourd\u2019hui, juste un soin. Le test au froid est positif prolongé, la pulpe réagit fort.' },
];

Object.assign(window, { FDI, isAnterior, isUpper, D_LEGEND, LEG, SEED_FINDINGS, D_PATIENTS, D_PERIO, D_PLAN, D_ASSUREURS, D_PRATICIENS, D_RDV, D_LABO, D_IMAGES, D_STOCK, D_TRANSCRIPT });
