/* Contenu coréen réaliste à l'échelle de l'outil réel — données du prototype.
   Les compteurs reflètent le corpus réel ; les listes contiennent des échantillons
   représentatifs (le reste se charge via les mêmes composants). */
(function () {

  // ---------- Corpus réel (compteurs) ----------
  const corpus = {
    dialogues: 50, dialogueLines: 570, comprehension: 100, reconstruction: 40,
    productionGuided: 40, shadowing: 20, miniGrammar: 60, vocabNew: 153,
    cardsP0: 160, audioTargetsP0: 693, vocabFreq: 2108, hangeulCsv: 286,
    exercises: 41, audioPhrases: 74, englishWords: 5010,
  };

  // ---------- Modules (shell multi-langues) ----------
  const modules = [
    { id:"ko", label:"Coréen", native:"한국어", state:"active", items:2394, progress:0.62, accent:"#8c3140" },
    { id:"en", label:"Anglais", native:"English", state:"active", items:5010, progress:0.18, accent:"#3f6280" },
    { id:"ja", label:"Japonais", native:"日本語", state:"prévu", items:0, progress:0, accent:"#4f6f5a" },
    { id:"zh", label:"Chinois", native:"中文", state:"prévu", items:0, progress:0, accent:"#a35a36" },
  ];

  // ---------- Tokeniseur glosé ----------
  const tk = (pairs) => pairs.map(([t, g]) => ({ t, g }));

  // ---------- Dialogue du jour : Au café (riche) ----------
  const dialogueCafe = {
    id: "d1", day: 1, title: "Au café", titleKr: "카페에서", level: "Débutant",
    lines: 28, summary: "Commander une boisson, demander le prix, payer.",
    audioReady: true,
    speakers: {
      A: { name: "Employé", kr: "점원", tone: "rose" },
      B: { name: "Client", kr: "손님", tone: "ochre" },
    },
    turns: [
      { s:"A", kr:"안녕하세요! 뭐 드릴까요?", ro:"annyeonghaseyo! mwo deurilkkayo?", fr:"Bonjour ! Que puis-je vous servir ?", audio:true,
        tokens: tk([["안녕하세요","bonjour (poli)"],["뭐","quoi"],["드릴까요","puis-je vous donner ?"]]) },
      { s:"B", kr:"아메리카노 한 잔 주세요.", ro:"amerikano han jan juseyo.", fr:"Un americano, s'il vous plaît.", audio:true,
        tokens: tk([["아메리카노","americano"],["한","un"],["잔","verre/tasse"],["주세요","donnez-moi"]]) },
      { s:"A", kr:"따뜻한 거요, 차가운 거요?", ro:"ttatteuthan geoyo, chagaun geoyo?", fr:"Chaud ou froid ?", audio:true,
        tokens: tk([["따뜻한","chaud"],["거요","chose (poli)"],["차가운","froid"]]) },
      { s:"B", kr:"따뜻한 거요. 얼마예요?", ro:"ttatteuthan geoyo. eolmayeyo?", fr:"Chaud. C'est combien ?", audio:true,
        tokens: tk([["따뜻한","chaud"],["거요","chose"],["얼마","combien"],["예요","c'est"]]) },
      { s:"A", kr:"사천 원이에요.", ro:"sacheon wonieyo.", fr:"Quatre mille wons.", audio:true,
        tokens: tk([["사천","quatre mille"],["원","won"],["이에요","c'est"]]) },
      { s:"B", kr:"여기 있어요. 감사합니다.", ro:"yeogi isseoyo. gamsahamnida.", fr:"Voici. Merci.", audio:true,
        tokens: tk([["여기","ici"],["있어요","il y a / voici"],["감사합니다","merci"]]) },
      { s:"A", kr:"네, 잠시만 기다려 주세요.", ro:"ne, jamsiman gidaryeo juseyo.", fr:"Oui, un instant s'il vous plaît.", audio:true,
        tokens: tk([["네","oui"],["잠시만","un instant"],["기다려 주세요","veuillez patienter"]]) },
    ],
    grammar: [
      { form:"-주세요", note:"« donnez-moi / s'il vous plaît », demande polie après un nom ou un verbe." },
      { form:"한 잔", note:"compteur pour les boissons : 한 (un) + 잔 (verre/tasse)." },
      { form:"얼마예요?", note:"« combien ça coûte ? » — 얼마 (combien) + 예요 (être, poli)." },
    ],
    vocabNew: [
      { kr:"주세요", fr:"donnez-moi / s'il vous plaît" }, { kr:"따뜻하다", fr:"être chaud" },
      { kr:"차갑다", fr:"être froid" }, { kr:"얼마", fr:"combien" }, { kr:"원", fr:"won (monnaie)" },
    ],
    vocabSeen: [
      { kr:"안녕하세요", fr:"bonjour" }, { kr:"감사합니다", fr:"merci" }, { kr:"여기", fr:"ici" },
    ],
    questions: [
      { q:"Qu'est-ce que le client commande ?", choices:["Un thé","Un americano","Un jus"], a:1, evidence:1,
        explain:"Ligne 2 : « 아메리카노 한 잔 주세요 » — un americano." },
      { q:"La boisson est servie…", choices:["chaude","froide","glacée"], a:0, evidence:3,
        explain:"Ligne 4 : « 따뜻한 거요 » — la version chaude." },
      { q:"Quel est le prix ?", choices:["4 000 ₩","3 000 ₩","14 000 ₩"], a:0, evidence:4,
        explain:"Ligne 5 : « 사천 원 » — quatre mille wons." },
    ],
    // reconstruction interactive (tuiles à remettre dans l'ordre)
    reconstruct: { fr:"Un americano, s'il vous plaît.", tiles:["주세요","한","아메리카노","잔"], answer:["아메리카노","한","잔","주세요"] },
    shadowing: [
      { kr:"아메리카노 한 잔 주세요.", ro:"amerikano han jan juseyo." },
      { kr:"얼마예요?", ro:"eolmayeyo?" },
    ],
  };

  // ---------- Hub de dialogues prototype ----------
  const themesD = [
    ["Au café","카페에서","Commander, prix, payer"],["Se présenter","자기소개","Nom, pays, métier"],
    ["Demander le chemin","길 묻기","Directions, lieux"],["Au restaurant","식당에서","Menu, commander, addition"],
    ["Au téléphone","전화 통화","Appeler, rendez-vous"],["Faire des courses","쇼핑","Tailles, couleurs, prix"],
    ["Chez le médecin","병원에서","Symptômes, rendez-vous"],["À la gare","기차역","Billets, horaires"],
    ["Présenter sa famille","가족 소개","Membres, âges"],["Le week-end","주말","Loisirs, projets"],
    ["Au travail","회사에서","Réunion, tâches"],["La météo","날씨","Saisons, temps"],
    ["Réserver un hôtel","호텔 예약","Chambres, dates"],["Au marché","시장에서","Marchander, quantités"],
    ["Inviter un ami","친구 초대","Heure, lieu"],["À la banque","은행에서","Compte, change"],
    ["Les transports","교통","Bus, métro, taxi"],["Au cinéma","영화관","Séances, places"],
    ["Donner son avis","의견 말하기","Goût, préférence"],["Faire ses adieux","작별 인사","Politesse, projets"],
  ];
  const dialogueList = themesD.map((t, i) => ({
    id: "d" + (i + 1), day: i + 1, title: t[0], titleKr: t[1], summary: t[2],
    lines: 18 + ((i * 7) % 22), level: i < 6 ? "Débutant" : i < 14 ? "Élémentaire" : "Intermédiaire",
    done: i < 3, progress: i === 0 ? 0 : i < 3 ? 1 : i < 6 ? (i % 3) / 3 : 0,
    audioReady: i < 12, locked: i >= 16,
  }));

  // ---------- Cartes Leitner P0 (échantillon ; total 160) ----------
  const cards = [
    { id:1, kr:"물", ro:"mul", fr:"eau", box:3, pos:"nom", pack:"Base 1", focus:"sens", choices:["eau","feu","riz"], seg:["물"], seen:true, audioPhrase:"물 좀 주세요.", audioPhraseFr:"De l'eau, s'il vous plaît." },
    { id:2, kr:"사람", ro:"saram", fr:"personne", box:2, pos:"nom", pack:"Base 1", focus:"sens", choices:["maison","personne","chemin"], seg:["사","람"], seen:true, audioPhrase:"저 사람은 누구예요?", audioPhraseFr:"Qui est cette personne ?" },
    { id:3, kr:"가다", ro:"gada", fr:"aller", box:4, pos:"verbe", pack:"Verbes 1", focus:"production", choices:["venir","manger","aller"], seg:["가","다"], seen:true, audioPhrase:"학교에 가요.", audioPhraseFr:"Je vais à l'école." },
    { id:4, kr:"먹다", ro:"meokda", fr:"manger", box:1, pos:"verbe", pack:"Verbes 1", focus:"production", choices:["manger","dormir","lire"], seg:["먹","다"], seen:false, audioPhrase:"밥을 먹어요.", audioPhraseFr:"Je mange (du riz)." },
    { id:5, kr:"학교", ro:"hakgyo", fr:"école", box:2, pos:"nom", pack:"Lieux", focus:"sens", choices:["bureau","école","marché"], seg:["학","교"], seen:true, audioPhrase:"학교가 멀어요.", audioPhraseFr:"L'école est loin." },
    { id:6, kr:"책", ro:"chaek", fr:"livre", box:5, pos:"nom", pack:"Base 1", focus:"sens", choices:["stylo","table","livre"], seg:["책"], seen:true, audioPhrase:"이 책 재미있어요.", audioPhraseFr:"Ce livre est intéressant." },
    { id:7, kr:"좋다", ro:"jota", fr:"être bien", box:3, pos:"adj", pack:"Adjectifs", focus:"écoute", choices:["être grand","être bien","être loin"], seg:["좋","다"], seen:true, audioPhrase:"날씨가 좋아요.", audioPhraseFr:"Il fait beau." },
    { id:8, kr:"오늘", ro:"oneul", fr:"aujourd'hui", box:1, pos:"nom", pack:"Temps", focus:"sens", choices:["demain","hier","aujourd'hui"], seg:["오","늘"], seen:false, audioPhrase:"오늘 뭐 해요?", audioPhraseFr:"Que fais-tu aujourd'hui ?" },
    { id:9, kr:"친구", ro:"chingu", fr:"ami", box:2, pos:"nom", pack:"Personnes", focus:"sens", choices:["ami","famille","voisin"], seg:["친","구"], seen:true, audioPhrase:"친구를 만나요.", audioPhraseFr:"Je rencontre un ami." },
    { id:10,kr:"하다", ro:"hada", fr:"faire", box:4, pos:"verbe", pack:"Verbes 1", focus:"production", choices:["faire","devenir","savoir"], seg:["하","다"], seen:true, audioPhrase:"운동을 해요.", audioPhraseFr:"Je fais du sport." },
  ];
  const cardModes = [
    { id:"jour", label:"Aujourd'hui", desc:"Priorite FSRS : dues puis nouvelles autorisees" },
    { id:"dues", label:"A revoir", desc:"Toutes les echeances, file finie avec effet FSRS" },
    { id:"faibles", label:"Fragiles", desc:"Points fragiles, file finie avec effet FSRS" },
    { id:"nonvues", label:"Nouvelles", desc:"Cartes jamais presentees, selon budget" },
    { id:"vues", label:"Deja vues", desc:"Consolidation des cartes deja rencontrees" },
    { id:"drill", label:"Drill libre", desc:"Entrainement a volonte, sans effet SRS" },
  ];
  const cardFormats = ["Carte", "Compréhension", "Production", "Transformation"];
  const cardPacks = ["Tous", "Base 1", "Verbes 1", "Adjectifs", "Lieux", "Temps", "Personnes"];

  // ---------- Production : 10 prompts ----------
  const prompts = [
    { id:1, fr:"Je voudrais un café, s'il vous plaît.", patron:"[nom] + 주세요", modele:"커피 주세요.", modeleRo:"keopi juseyo.", must:["커피","주세요"], status:"ok" },
    { id:2, fr:"C'est combien ?", patron:"[chose] + 얼마예요?", modele:"이거 얼마예요?", modeleRo:"igeo eolmayeyo?", must:["얼마","예요"], status:"fluide" },
    { id:3, fr:"Je suis étudiant.", patron:"[nom] + 이에요/예요", modele:"학생이에요.", modeleRo:"haksaengieyo.", must:["학생","이에요"], status:"corriger" },
    { id:4, fr:"Où sont les toilettes ?", patron:"[lieu] + 어디예요?", modele:"화장실 어디예요?", modeleRo:"hwajangsil eodiyeyo?", must:["화장실","어디"], status:"todo" },
    { id:5, fr:"J'aime le café.", patron:"[nom] + 좋아해요", modele:"커피 좋아해요.", modeleRo:"keopi joahaeyo.", must:["커피","좋아해요"], status:"todo" },
    { id:6, fr:"Je vais à l'école.", patron:"[lieu] + 에 가요", modele:"학교에 가요.", modeleRo:"hakgyoe gayo.", must:["학교","가요"], status:"todo" },
    { id:7, fr:"Qu'est-ce que c'est ?", patron:"[chose] + 뭐예요?", modele:"이게 뭐예요?", modeleRo:"ige mwoyeyo?", must:["뭐","예요"], status:"todo" },
    { id:8, fr:"Je ne mange pas de viande.", patron:"안 + [verbe]", modele:"고기 안 먹어요.", modeleRo:"gogi an meogeoyo.", must:["안","먹어요"], status:"todo" },
    { id:9, fr:"Il fait beau aujourd'hui.", patron:"[temps] + 날씨가 좋아요", modele:"오늘 날씨가 좋아요.", modeleRo:"oneul nalssiga joayo.", must:["오늘","좋아요"], status:"todo" },
    { id:10, fr:"Je rencontre un ami.", patron:"[nom] + 를 만나요", modele:"친구를 만나요.", modeleRo:"chingureul mannayo.", must:["친구","만나요"], status:"todo" },
  ];
  const productionJournal = [
    { kr:"커피 주세요.", fr:"Un café svp", status:"OK", note:"Correct. Ajouter 한 잔 pour préciser." },
    { kr:"학생이에요.", fr:"Je suis étudiant", status:"Fluide", note:"Parfait." },
    { kr:"이거 얼마에요?", fr:"C'est combien", status:"À corriger", note:"예요 et non 에요 après voyelle." },
  ];

  // ---------- Apprendre : structures + vocab fréquent ----------
  const structures = [
    { id:"particules", label:"Particules", kr:"조사", n:18, due:4, ex:"은/는 · 이/가 · 을/를" },
    { id:"presence", label:"Présence", kr:"있다/없다", n:9, due:0, ex:"있어요 / 없어요" },
    { id:"localisation", label:"Localisation", kr:"위치", n:12, due:3, ex:"위 · 아래 · 옆 · 앞" },
    { id:"action", label:"Action", kr:"동작", n:22, due:6, ex:"-아요/-어요" },
    { id:"negation", label:"Négation", kr:"부정", n:8, due:2, ex:"안 · -지 않다 · 못" },
    { id:"gout", label:"Goût", kr:"기호", n:7, due:0, ex:"좋아하다 / 싫어하다" },
    { id:"preference", label:"Préférence", kr:"선호", n:6, due:1, ex:"-보다 더 · 제일" },
  ];
  const vocabFreqModes = [
    { id:"sens", label:"Sens", desc:"KR → sens" }, { id:"production", label:"Production", desc:"FR → KR" },
    { id:"ecoute", label:"Écoute", desc:"Audio → sens" }, { id:"dictee", label:"Dictée", desc:"Audio → écrire" },
    { id:"cloze", label:"Cloze", desc:"Texte à trou" },
  ];
  const hangeulBlocs = [
    { id:"voy", title:"Voyelles", kr:"ㅏ ㅓ ㅗ ㅜ ㅡ ㅣ", count:10, due:0, mastery:0.9 },
    { id:"cons", title:"Consonnes", kr:"ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ", count:14, due:2, mastery:0.75 },
    { id:"syl", title:"Syllabes ouvertes", kr:"가 나 다 라", count:40, due:0, mastery:0.82 },
    { id:"bat", title:"Batchim", kr:"악 안 알 압", count:27, due:6, mastery:0.41 },
    { id:"mix", title:"Révision mixte", kr:"한 글 읽 기", count:30, due:8, mastery:0.6 },
  ];
  // ---------- État du jour ----------
  const todayState = {
    srsDue: 14, ratés: 6, productionDone: 2, productionTarget: 3,
    lastSession: "Hier · 28 min · 41 cartes", streak: 9, items: 2394, coverage: 0.62,
    audio7j: [3, 0, 8, 12, 5, 0, 6], charge: "modérée",
    weakTop: { label:"Batchim final (받침)", n:11, kind:"son" },
  };

  // ---------- Intentions ----------
  const intentions = [
    { id:"reviser", label:"Réviser", kr:"복습", desc:"Cartes dues + ratés à reprendre", icon:"refresh" },
    { id:"decouvrir", label:"Découvrir", kr:"학습", desc:"Nouveaux mots et structures", icon:"plus" },
    { id:"ecouter", label:"Lire / écouter", kr:"듣기", desc:"Input connecté + réécoute", icon:"ear" },
    { id:"dialoguer", label:"Dialoguer", kr:"대화", desc:"Dialogue du jour + shadowing", icon:"chat" },
    { id:"produire", label:"Produire", kr:"작문", desc:"Réponse utile ou phrase personnelle", icon:"pen" },
    { id:"reparer", label:"Réparer un point faible", kr:"교정", desc:"Cibler une erreur récurrente", icon:"wrench" },
  ];
  const charges = [
    { id:"legere", label:"Légère", desc:"Réviser l'essentiel", min:15 },
    { id:"moderee", label:"Modérée", desc:"Équilibre révision + neuf", min:30 },
    { id:"conso", label:"Consolidation", desc:"Reprendre les points fragiles", min:45 },
  ];
  const drillModes = [
    { id:"mixte", label:"Mixte", desc:"Équilibre entre rappel, dictée, input et production" },
    { id:"rappel", label:"Rappel", desc:"Cartes et vocabulaire en rappel actif" },
    { id:"reconnaissance", label:"Reconnaissance", desc:"QCM court comme échafaudage" },
    { id:"dictee", label:"Dictée", desc:"Audio vers hangeul et micro-écriture" },
    { id:"fluidite", label:"Fluidité", desc:"Réécoute, lecture et shadowing sans pression SRS" },
  ];
  const intensiveDurations = [60, 90, 120, 180];

  // ---------- Plan adaptatif du jour ----------
  const sessionPlan = [
    { n:1, label:"Révisions dues", kind:"Réviser", meta:"14 cartes Leitner", min:6, srs:true },
    { n:2, label:"Reprendre mes ratés", kind:"Réparer", meta:"6 items signalés", min:4, srs:true },
    { n:3, label:"Nouveaux mots utiles", kind:"Découvrir", meta:"max 10 items", min:4, srs:true },
    { n:4, label:"Dialogue du jour — Au café", kind:"Dialoguer", meta:"écoute + compréhension", min:8, srs:false },
    { n:5, label:"Produire une réponse", kind:"Produire", meta:"1 prompt utile", min:4, srs:false },
    { n:6, label:"Fluidité courte", kind:"Réécouter", meta:"matière déjà connue", min:4, srs:false },
  ];

  // ---------- Pilotage ----------
  const skills = [
    { name:"Lecture", val:0.84 }, { name:"Vocabulaire", val:0.61 },
    { name:"Compréhension", val:0.48 }, { name:"Production", val:0.39 },
    { name:"Dialogue", val:0.55 }, { name:"Audio pilote", val:0.5 },
  ];
  const boxes = [ {box:1,n:38},{box:2,n:52},{box:3,n:67},{box:4,n:44},{box:5,n:29} ];
  const typeSplit = [ {t:"Noms",n:58},{t:"Verbes",n:24},{t:"Adjectifs",n:12},{t:"Adverbes",n:6} ];
  const questionModes = [ {m:"Rappel actif",n:42},{m:"QCM",n:31},{m:"Dictée",n:17},{m:"Cloze",n:10} ];
  const weakPoints = [
    { tag:"batchim", label:"Batchim final (받침)", n:11, kind:"son" },
    { tag:"forme", label:"-아요/-어요 conjugaison", n:7, kind:"forme" },
    { tag:"sens", label:"있다 vs 없다", n:4, kind:"sens" },
    { tag:"contexte", label:"Politesse 요 vs 반말", n:3, kind:"contexte" },
  ];
  const exerciseMemory = [
    { label:"Dictée par blocs — Jour 3", score:0.72, when:"2 j" },
    { label:"Micro-contrastes ㅓ/ㅗ", score:0.55, when:"3 j" },
    { label:"Cloze particules", score:0.81, when:"5 j" },
  ];
  const recentSessions = [
    { date:"Hier", min:28, cards:41, kind:"Séance du jour" },
    { date:"2 j", min:15, cards:22, kind:"Reprise des ratés" },
    { date:"3 j", min:42, cards:60, kind:"Dialogue + cartes" },
    { date:"5 j", min:30, cards:38, kind:"Séance du jour" },
  ];

  // ---------- Bibliothèque (vues secondaires) ----------
  const listItems = cards.map(c => ({ kr:c.kr, ro:c.ro, fr:c.fr, pos:c.pos, box:c.box, pack:c.pack, seen:c.seen }));
  const sinoFamilies = [
    { root:"學 (학)", sense:"étudier", words:[["학교","école"],["학생","étudiant"],["학습","apprentissage"],["대학","université"]] },
    { root:"水 (수)", sense:"eau", words:[["수영","natation"],["수도","eau courante"],["홍수","inondation"]] },
    { root:"火 (화)", sense:"feu", words:[["화재","incendie"],["화산","volcan"],["소화","digestion"]] },
    { root:"人 (인)", sense:"personne", words:[["인구","population"],["성인","adulte"],["개인","individu"]] },
  ];
  const audioPhrases = [
    { kr:"물 좀 주세요.", fr:"De l'eau, s'il vous plaît.", validated:true },
    { kr:"학교에 가요.", fr:"Je vais à l'école.", validated:true },
    { kr:"오늘 날씨가 좋아요.", fr:"Il fait beau aujourd'hui.", validated:false },
    { kr:"친구를 만나요.", fr:"Je rencontre un ami.", validated:false },
    { kr:"이거 얼마예요?", fr:"C'est combien ?", validated:true },
  ];

  // ---------- Réglages (repli ; canonique dans data/settings.defaults.json) ----------
  const settingsDefaults = {
    profile:"Sora", profiles:["Sora","Invité"], dark:false,
    accent:"corail",
    parcoursDuration:30, todayIntention:"reviser", todayCharge:"moderee", todayDrillMode:"mixte",
    sessionSize:20, retention:0.9, itemType:"mixte",
    newPerDay:10, questionMode:"rappel", qcmAuto:false, qcmChoices:3, listSize:50,
    statusFilter:"tous",
  };

  // ---------- Mapping ancien onglet → nouvelle position ----------
  const mapping = [
    ["Aujourd'hui", "Aujourd'hui", "Cœur, dense, action dans le 1er viewport"],
    ["Méthode", "Panneau latéral · Méthode", "Référence repliable + lien depuis Aujourd'hui"],
    ["Hangeul", "Apprendre › Hangeul", "Présenté comme secours / consolidation"],
    ["Cartes P0", "Cartes (zone principale)", "Modes, filtres, formats, learning map"],
    ["Exercices", "Apprendre › Exercices", "Rangé par intention + tuiles"],
    ["Dialogues", "Dialogues (zone principale)", "Hub 20, lecteur audio, tokens glosés"],
    ["Production", "Produire (zone principale)", "Cahier d'écriture + couverture + LLM"],
    ["Audio", "Apprendre › Audio + Pilotage › Audio validé", "Lecture lente, dictée, phrases, shadowing"],
    ["Liste", "Pilotage › Bibliothèque › Liste", "Paginée, filtres, recherche"],
    ["Familles sino", "Pilotage › Bibliothèque › Familles sino", "Lecture seule"],
    ["Stats", "Pilotage", "Bandeaux courts, diagnostic"],
    ["Réglages", "Panneau latéral · Réglages", "Contrôles réels + thème sombre"],
  ];

  window.LANGUES_DATA = {
    corpus, modules, dialogueCafe, dialogueList, cards, cardModes, cardFormats, cardPacks,
    prompts, productionJournal, structures, vocabFreqModes, hangeulBlocs,
    todayState, intentions, charges, drillModes, intensiveDurations, sessionPlan,
    skills, boxes, typeSplit, questionModes, weakPoints, exerciseMemory, recentSessions,
    listItems, sinoFamilies, audioPhrases, settingsDefaults, mapping,
  };
})();
