// Task catalog — velký seznam úkolů pro všechny kategorie + úložiště vlastních úkolů

const TASK_CATALOG = [
  // ─── SLUCHOVÉ VNÍMÁNÍ (hearing) ─────────────────────────────
  { id: 'h1', categoryId: 'hearing', level: 1,
    title: 'Kde slyšíš hlásku „K" na začátku?', titleShort: 'Kde slyšíš K?',
    audio: 'Poslouchej. Kočička, pejsek, rybička, jablko. Kde slyšíš K?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🐱', label: 'Kočička', correct: true },
      { id: 'b', emoji: '🐶', label: 'Pejsek', correct: false },
      { id: 'c', emoji: '🐟', label: 'Rybička', correct: false },
      { id: 'd', emoji: '🍎', label: 'Jablko', correct: false },
    ] },
  { id: 'h2', categoryId: 'hearing', level: 2,
    title: 'Kde slyšíš hlásku „S" na začátku?', titleShort: 'Kde slyšíš S?',
    audio: 'Poslouchej. Slunce, měsíc, kytička, červíček. Kde slyšíš S?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🌞', label: 'Slunce', correct: true },
      { id: 'b', emoji: '🌙', label: 'Měsíc', correct: false },
      { id: 'c', emoji: '🌸', label: 'Kytička', correct: false },
      { id: 'd', emoji: '🐛', label: 'Červíček', correct: false },
    ] },
  { id: 'h3', categoryId: 'hearing', level: 3,
    title: 'Kde slyšíš hlásku „M" na začátku?', titleShort: 'Kde slyšíš M?',
    audio: 'Poslouchej. Myška, ryba, had, žirafa. Kde slyšíš M?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🐭', label: 'Myška', correct: true },
      { id: 'b', emoji: '🐟', label: 'Ryba', correct: false },
      { id: 'c', emoji: '🐍', label: 'Had', correct: false },
      { id: 'd', emoji: '🦒', label: 'Žirafa', correct: false },
    ] },
  { id: 'h4', categoryId: 'hearing', level: 4,
    title: 'Kde slyšíš hlásku „P" na začátku?', titleShort: 'Kde slyšíš P?',
    audio: 'Poslouchej. Panda, kočka, slon, myš. Kde slyšíš P?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🐼', label: 'Panda', correct: true },
      { id: 'b', emoji: '🐱', label: 'Kočka', correct: false },
      { id: 'c', emoji: '🐘', label: 'Slon', correct: false },
      { id: 'd', emoji: '🐭', label: 'Myš', correct: false },
    ] },
  { id: 'h5', categoryId: 'hearing', level: 5,
    title: 'Kde slyšíš hlásku „L" na začátku?', titleShort: 'Kde slyšíš L?',
    audio: 'Poslouchej. Liška, kráva, koza, ježek. Kde slyšíš L?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🦊', label: 'Liška', correct: true },
      { id: 'b', emoji: '🐄', label: 'Kráva', correct: false },
      { id: 'c', emoji: '🐐', label: 'Koza', correct: false },
      { id: 'd', emoji: '🦔', label: 'Ježek', correct: false },
    ] },
  { id: 'h6', categoryId: 'hearing', level: 6,
    title: 'Kde slyšíš hlásku „R" na začátku?', titleShort: 'Kde slyšíš R?',
    audio: 'Poslouchej. Ryba, oko, pero, nos. Kde slyšíš R?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🐟', label: 'Ryba', correct: true },
      { id: 'b', emoji: '👁️', label: 'Oko', correct: false },
      { id: 'c', emoji: '🖊️', label: 'Pero', correct: false },
      { id: 'd', emoji: '👃', label: 'Nos', correct: false },
    ] },
  { id: 'h7', categoryId: 'hearing', level: 7,
    title: 'Kde slyšíš hlásku „Š" na začátku?', titleShort: 'Kde slyšíš Š?',
    audio: 'Poslouchej. Šnek, dům, kolo, míč. Kde slyšíš Š?',
    reward: { xp: 14, coins: 7 }, boss: true,
    options: [
      { id: 'a', emoji: '🐌', label: 'Šnek', correct: true },
      { id: 'b', emoji: '🏠', label: 'Dům', correct: false },
      { id: 'c', emoji: '🚲', label: 'Kolo', correct: false },
      { id: 'd', emoji: '⚽', label: 'Míč', correct: false },
    ] },
  { id: 'h8', categoryId: 'hearing', level: 8,
    title: 'Kde slyšíš hlásku „V" na začátku?', titleShort: 'Kde slyšíš V?',
    audio: 'Poslouchej. Vlak, auto, loď, kolo. Kde slyšíš V?',
    reward: { xp: 14, coins: 7 },
    options: [
      { id: 'a', emoji: '🚂', label: 'Vlak', correct: true },
      { id: 'b', emoji: '🚗', label: 'Auto', correct: false },
      { id: 'c', emoji: '⛵', label: 'Loď', correct: false },
      { id: 'd', emoji: '🚲', label: 'Kolo', correct: false },
    ] },

  // ─── JAZÝČKOVÁ DÍLNA (speech) ──────────────────────────────
  { id: 's1', categoryId: 'speech', level: 1,
    title: 'Zkus zopakovat: máma', titleShort: 'Řekni: máma',
    audio: 'Řekni po mně. Máma.',
    reward: { xp: 8, coins: 4 },
    options: [
      { id: 'a', emoji: '👩', label: 'Máma', correct: true },
      { id: 'b', emoji: '👨', label: 'Táta', correct: false },
      { id: 'c', emoji: '👶', label: 'Miminko', correct: false },
      { id: 'd', emoji: '👵', label: 'Babička', correct: false },
    ] },
  { id: 's2', categoryId: 'speech', level: 2,
    title: 'Co říká kráva?', titleShort: 'Co říká kráva?',
    audio: 'Co říká kráva? Poslouchej: bůůů, mňau, haf, kvák.',
    reward: { xp: 8, coins: 4 },
    options: [
      { id: 'a', emoji: '🐄', label: 'Bůůů', correct: true },
      { id: 'b', emoji: '🐱', label: 'Mňau', correct: false },
      { id: 'c', emoji: '🐶', label: 'Haf', correct: false },
      { id: 'd', emoji: '🦆', label: 'Kvák', correct: false },
    ] },
  { id: 's3', categoryId: 'speech', level: 3,
    title: 'Co říká pejsek?', titleShort: 'Co říká pejsek?',
    audio: 'Co říká pejsek?',
    reward: { xp: 8, coins: 4 },
    options: [
      { id: 'a', emoji: '🐶', label: 'Haf haf', correct: true },
      { id: 'b', emoji: '🐷', label: 'Kvík', correct: false },
      { id: 'c', emoji: '🐸', label: 'Kvák', correct: false },
      { id: 'd', emoji: '🦉', label: 'Hů', correct: false },
    ] },
  { id: 's4', categoryId: 'speech', level: 4,
    title: 'Která písnička začíná na „Š"?', titleShort: 'Co je na Š?',
    audio: 'Které slovo začíná na Š? Šátek, kytička, auto, strom.',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🧣', label: 'Šátek', correct: true },
      { id: 'b', emoji: '🌸', label: 'Kytička', correct: false },
      { id: 'c', emoji: '🚗', label: 'Auto', correct: false },
      { id: 'd', emoji: '🌳', label: 'Strom', correct: false },
    ] },
  { id: 's5', categoryId: 'speech', level: 5,
    title: 'Zopakuj: Říká se mu koloběžka', titleShort: 'Řekni: koloběžka',
    audio: 'Zopakuj: koloběžka. Která je správně?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🛴', label: 'Koloběžka', correct: true },
      { id: 'b', emoji: '🚲', label: 'Kolo', correct: false },
      { id: 'c', emoji: '🛹', label: 'Skejt', correct: false },
      { id: 'd', emoji: '🛷', label: 'Saně', correct: false },
    ] },
  { id: 's6', categoryId: 'speech', level: 6,
    title: 'Co říká ovečka?', titleShort: 'Co říká ovečka?',
    audio: 'Co říká ovečka?',
    reward: { xp: 12, coins: 6 }, boss: true,
    options: [
      { id: 'a', emoji: '🐑', label: 'Bééé', correct: true },
      { id: 'b', emoji: '🐴', label: 'Íhahahá', correct: false },
      { id: 'c', emoji: '🐔', label: 'Kikirikí', correct: false },
      { id: 'd', emoji: '🐮', label: 'Bůůů', correct: false },
    ] },

  // ─── POČÍTÁNÍ (count) ──────────────────────────────────────
  { id: 'c1', categoryId: 'count', level: 1,
    title: 'Kolik je jablíček?', titleShort: 'Kolik je 🍎🍎🍎?',
    audio: 'Spočítej jablíčka. Jedno, dva, tři.',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '1️⃣', label: 'Jedno', correct: false },
      { id: 'b', emoji: '2️⃣', label: 'Dvě', correct: false },
      { id: 'c', emoji: '3️⃣', label: 'Tři', correct: true },
      { id: 'd', emoji: '4️⃣', label: 'Čtyři', correct: false },
    ] },
  { id: 'c2', categoryId: 'count', level: 2,
    title: 'Kolik je koláčků?', titleShort: 'Kolik je 🧁🧁?',
    audio: 'Spočítej koláčky.',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '1️⃣', label: 'Jeden', correct: false },
      { id: 'b', emoji: '2️⃣', label: 'Dva', correct: true },
      { id: 'c', emoji: '3️⃣', label: 'Tři', correct: false },
      { id: 'd', emoji: '5️⃣', label: 'Pět', correct: false },
    ] },
  { id: 'c3', categoryId: 'count', level: 3,
    title: 'Kolik pand vidíš? 🐼🐼🐼🐼', titleShort: 'Kolik pand?',
    audio: 'Spočítej pandy.',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '2️⃣', label: 'Dvě', correct: false },
      { id: 'b', emoji: '3️⃣', label: 'Tři', correct: false },
      { id: 'c', emoji: '4️⃣', label: 'Čtyři', correct: true },
      { id: 'd', emoji: '5️⃣', label: 'Pět', correct: false },
    ] },
  { id: 'c4', categoryId: 'count', level: 4,
    title: 'Které číslo je největší?', titleShort: 'Co je nejvíc?',
    audio: 'Které číslo je největší? Dva, pět, tři, jedna.',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '2️⃣', label: 'Dva', correct: false },
      { id: 'b', emoji: '5️⃣', label: 'Pět', correct: true },
      { id: 'c', emoji: '3️⃣', label: 'Tři', correct: false },
      { id: 'd', emoji: '1️⃣', label: 'Jedna', correct: false },
    ] },
  { id: 'c5', categoryId: 'count', level: 5,
    title: 'Co přijde po čísle 3?', titleShort: 'Po 3 přijde…',
    audio: 'Jedna, dva, tři… co přijde dál?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '2️⃣', label: 'Dva', correct: false },
      { id: 'b', emoji: '4️⃣', label: 'Čtyři', correct: true },
      { id: 'c', emoji: '6️⃣', label: 'Šest', correct: false },
      { id: 'd', emoji: '1️⃣', label: 'Jedna', correct: false },
    ] },
  { id: 'c6', categoryId: 'count', level: 6,
    title: 'Které číslo je nejmenší?', titleShort: 'Co je nejmíň?',
    audio: 'Které číslo je nejmenší? Čtyři, sedm, dva, devět.',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '4️⃣', label: 'Čtyři', correct: false },
      { id: 'b', emoji: '7️⃣', label: 'Sedm', correct: false },
      { id: 'c', emoji: '2️⃣', label: 'Dva', correct: true },
      { id: 'd', emoji: '9️⃣', label: 'Devět', correct: false },
    ] },
  { id: 'c7', categoryId: 'count', level: 7,
    title: 'Kolik je 2 + 1?', titleShort: '2 + 1 = ?',
    audio: 'Kolik je dvě plus jedna?',
    reward: { xp: 14, coins: 7 },
    options: [
      { id: 'a', emoji: '2️⃣', label: 'Dva', correct: false },
      { id: 'b', emoji: '3️⃣', label: 'Tři', correct: true },
      { id: 'c', emoji: '4️⃣', label: 'Čtyři', correct: false },
      { id: 'd', emoji: '5️⃣', label: 'Pět', correct: false },
    ] },
  { id: 'c8', categoryId: 'count', level: 8,
    title: 'Kolik je 4 - 2?', titleShort: '4 - 2 = ?',
    audio: 'Kolik je čtyři mínus dva?',
    reward: { xp: 14, coins: 7 },
    options: [
      { id: 'a', emoji: '1️⃣', label: 'Jedna', correct: false },
      { id: 'b', emoji: '2️⃣', label: 'Dva', correct: true },
      { id: 'c', emoji: '3️⃣', label: 'Tři', correct: false },
      { id: 'd', emoji: '6️⃣', label: 'Šest', correct: false },
    ] },
  { id: 'c9', categoryId: 'count', level: 9,
    title: 'Kolik mincí má Pandička?', titleShort: 'Kolik mincí? 💰💰💰💰💰',
    audio: 'Spočítej mince.',
    reward: { xp: 16, coins: 8 }, boss: true,
    options: [
      { id: 'a', emoji: '3️⃣', label: 'Tři', correct: false },
      { id: 'b', emoji: '4️⃣', label: 'Čtyři', correct: false },
      { id: 'c', emoji: '5️⃣', label: 'Pět', correct: true },
      { id: 'd', emoji: '6️⃣', label: 'Šest', correct: false },
    ] },

  // ─── PÍSMENKOVÝ LES (letters) ──────────────────────────────
  { id: 'l1', categoryId: 'letters', level: 1,
    title: 'Na které písmenko začíná „Auto"?', titleShort: 'Auto začíná na…',
    audio: 'Na které písmenko začíná slovo auto?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🅰️', label: 'A', correct: true },
      { id: 'b', emoji: '🅱️', label: 'B', correct: false },
      { id: 'c', emoji: '🇨', label: 'C', correct: false },
      { id: 'd', emoji: '🇩', label: 'D', correct: false },
    ] },
  { id: 'l2', categoryId: 'letters', level: 2,
    title: 'Na které písmenko začíná „Banán"?', titleShort: 'Banán začíná na…',
    audio: 'Na které písmenko začíná slovo banán?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🅰️', label: 'A', correct: false },
      { id: 'b', emoji: '🅱️', label: 'B', correct: true },
      { id: 'c', emoji: '🇨', label: 'C', correct: false },
      { id: 'd', emoji: '🇲', label: 'M', correct: false },
    ] },
  { id: 'l3', categoryId: 'letters', level: 3,
    title: 'Na které písmenko začíná „Dům"?', titleShort: 'Dům začíná na…',
    audio: 'Na které písmenko začíná slovo dům?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🇧', label: 'B', correct: false },
      { id: 'b', emoji: '🇨', label: 'C', correct: false },
      { id: 'c', emoji: '🇩', label: 'D', correct: true },
      { id: 'd', emoji: '🇪', label: 'E', correct: false },
    ] },
  { id: 'l4', categoryId: 'letters', level: 4,
    title: 'Které slovo začíná na „J"?', titleShort: 'Co je na J?',
    audio: 'Které slovo začíná na písmenko J?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🍎', label: 'Jablko', correct: true },
      { id: 'b', emoji: '🐰', label: 'Králík', correct: false },
      { id: 'c', emoji: '🍌', label: 'Banán', correct: false },
      { id: 'd', emoji: '🐻', label: 'Medvěd', correct: false },
    ] },
  { id: 'l5', categoryId: 'letters', level: 5,
    title: 'Které slovo začíná na „H"?', titleShort: 'Co je na H?',
    audio: 'Které slovo začíná na H?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🍐', label: 'Hruška', correct: true },
      { id: 'b', emoji: '🥕', label: 'Mrkev', correct: false },
      { id: 'c', emoji: '🌽', label: 'Kukuřice', correct: false },
      { id: 'd', emoji: '🥔', label: 'Brambor', correct: false },
    ] },
  { id: 'l6', categoryId: 'letters', level: 6,
    title: 'Které slovo končí na „A"?', titleShort: 'Co končí na A?',
    audio: 'Které slovo končí písmenkem A?',
    reward: { xp: 14, coins: 7 }, boss: true,
    options: [
      { id: 'a', emoji: '👩', label: 'Máma', correct: true },
      { id: 'b', emoji: '👨', label: 'Táta', correct: true },
      { id: 'c', emoji: '🐶', label: 'Pes', correct: false },
      { id: 'd', emoji: '🐱', label: 'Kočka', correct: true },
    ] },
  { id: 'l7', categoryId: 'letters', level: 7,
    title: 'Na které písmenko začíná „Kočka"?', titleShort: 'Kočka začíná na…',
    audio: 'Na které písmenko začíná slovo kočka?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🇯', label: 'J', correct: false },
      { id: 'b', emoji: '🇰', label: 'K', correct: true },
      { id: 'c', emoji: '🇱', label: 'L', correct: false },
      { id: 'd', emoji: '🇲', label: 'M', correct: false },
    ] },

  // ─── PAMATOVAČKY (memory) ──────────────────────────────────
  { id: 'm1', categoryId: 'memory', level: 1,
    title: 'Které zvíře jsme viděli? 🐶 → zapamatuj si!', titleShort: 'Co jsme viděli?',
    audio: 'Zapamatuj si obrázek: pejsek. Které zvířátko to bylo?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🐱', label: 'Kočka', correct: false },
      { id: 'b', emoji: '🐶', label: 'Pejsek', correct: true },
      { id: 'c', emoji: '🐰', label: 'Králík', correct: false },
      { id: 'd', emoji: '🐼', label: 'Panda', correct: false },
    ] },
  { id: 'm2', categoryId: 'memory', level: 2,
    title: 'Jaká barva byla míč? 🔴', titleShort: 'Barva míče?',
    audio: 'Zapamatuj si červený míč. Jakou měl barvu?',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🔴', label: 'Červená', correct: true },
      { id: 'b', emoji: '🔵', label: 'Modrá', correct: false },
      { id: 'c', emoji: '🟢', label: 'Zelená', correct: false },
      { id: 'd', emoji: '🟡', label: 'Žlutá', correct: false },
    ] },
  { id: 'm3', categoryId: 'memory', level: 3,
    title: 'Co bylo uprostřed? 🍎 🍌 🍓', titleShort: 'Co bylo uprostřed?',
    audio: 'Jablko, banán, jahoda. Co bylo uprostřed?',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '🍎', label: 'Jablko', correct: false },
      { id: 'b', emoji: '🍌', label: 'Banán', correct: true },
      { id: 'c', emoji: '🍓', label: 'Jahoda', correct: false },
      { id: 'd', emoji: '🍊', label: 'Pomeranč', correct: false },
    ] },
  { id: 'm4', categoryId: 'memory', level: 4,
    title: 'Co chybí? 🌞 🌙 ? 🌈', titleShort: 'Co chybí?',
    audio: 'Slunce, měsíc, něco chybí, duha. Co je uprostřed?',
    reward: { xp: 14, coins: 7 },
    options: [
      { id: 'a', emoji: '⭐', label: 'Hvězda', correct: true },
      { id: 'b', emoji: '☁️', label: 'Mrak', correct: false },
      { id: 'c', emoji: '❄️', label: 'Sněhulák', correct: false },
      { id: 'd', emoji: '☀️', label: 'Slunce', correct: false },
    ] },
  { id: 'm5', categoryId: 'memory', level: 5,
    title: 'Kdo byl první? 🐰 🐢 🦊', titleShort: 'Kdo byl první?',
    audio: 'Zapamatuj si: králík, želva, liška. Kdo byl první?',
    reward: { xp: 14, coins: 7 }, boss: true,
    options: [
      { id: 'a', emoji: '🐰', label: 'Králík', correct: true },
      { id: 'b', emoji: '🐢', label: 'Želva', correct: false },
      { id: 'c', emoji: '🦊', label: 'Liška', correct: false },
      { id: 'd', emoji: '🐻', label: 'Medvěd', correct: false },
    ] },

  // ─── TVAROMĚSTO (shapes) ───────────────────────────────────
  { id: 't1', categoryId: 'shapes', level: 1,
    title: 'Najdi kolečko', titleShort: 'Najdi kolo',
    audio: 'Najdi kolečko.',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '⬛', label: 'Čtverec', correct: false },
      { id: 'b', emoji: '🔴', label: 'Kolečko', correct: true },
      { id: 'c', emoji: '🔺', label: 'Trojúhelník', correct: false },
      { id: 'd', emoji: '⭐', label: 'Hvězda', correct: false },
    ] },
  { id: 't2', categoryId: 'shapes', level: 2,
    title: 'Najdi čtvereček', titleShort: 'Najdi čtverec',
    audio: 'Najdi čtvereček.',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🔴', label: 'Kolečko', correct: false },
      { id: 'b', emoji: '🟦', label: 'Čtverec', correct: true },
      { id: 'c', emoji: '🔺', label: 'Trojúhelník', correct: false },
      { id: 'd', emoji: '💛', label: 'Srdíčko', correct: false },
    ] },
  { id: 't3', categoryId: 'shapes', level: 3,
    title: 'Najdi trojúhelník', titleShort: 'Najdi trojúhelník',
    audio: 'Najdi trojúhelník.',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🔷', label: 'Kosočtverec', correct: false },
      { id: 'b', emoji: '🔴', label: 'Kolečko', correct: false },
      { id: 'c', emoji: '🔺', label: 'Trojúhelník', correct: true },
      { id: 'd', emoji: '⬛', label: 'Čtverec', correct: false },
    ] },
  { id: 't4', categoryId: 'shapes', level: 4,
    title: 'Najdi hvězdičku', titleShort: 'Najdi hvězdu',
    audio: 'Najdi hvězdičku.',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '⭐', label: 'Hvězda', correct: true },
      { id: 'b', emoji: '❤️', label: 'Srdíčko', correct: false },
      { id: 'c', emoji: '🔵', label: 'Kolo', correct: false },
      { id: 'd', emoji: '🔶', label: 'Kosočtverec', correct: false },
    ] },
  { id: 't5', categoryId: 'shapes', level: 5,
    title: 'Najdi srdíčko', titleShort: 'Najdi srdíčko',
    audio: 'Najdi srdíčko.',
    reward: { xp: 12, coins: 6 },
    options: [
      { id: 'a', emoji: '⬛', label: 'Čtverec', correct: false },
      { id: 'b', emoji: '❤️', label: 'Srdíčko', correct: true },
      { id: 'c', emoji: '🔺', label: 'Trojúhelník', correct: false },
      { id: 'd', emoji: '⭐', label: 'Hvězda', correct: false },
    ] },
  { id: 't6', categoryId: 'shapes', level: 6,
    title: 'Který tvar má 3 rohy?', titleShort: '3 rohy má…',
    audio: 'Který tvar má tři rohy?',
    reward: { xp: 14, coins: 7 }, boss: true,
    options: [
      { id: 'a', emoji: '🔴', label: 'Kolo', correct: false },
      { id: 'b', emoji: '⬛', label: 'Čtverec', correct: false },
      { id: 'c', emoji: '🔺', label: 'Trojúhelník', correct: true },
      { id: 'd', emoji: '⭐', label: 'Hvězda', correct: false },
    ] },
];

const CATEGORIES_META = [
  { id: 'hearing', name: 'Ucháčkovo sluchání', shortName: 'Sluchání', icon: '👂', color: '#A5CCE8', desc: 'Co to tady šumí?' },
  { id: 'speech',  name: 'Jazýčková dílna',    shortName: 'Mluvení',  icon: '👅', color: '#F4B5C1', desc: 'Učíme se pěkně mluvit' },
  { id: 'count',   name: 'Počítání s pandou',  shortName: 'Čísla',    icon: '🔢', color: '#F4C95D', desc: 'Koláček a jabka' },
  { id: 'letters', name: 'Písmenkový les',     shortName: 'Písmenka', icon: '📚', color: '#B8E0C2', desc: 'Hledáme kamarády A, B, C' },
  { id: 'memory',  name: 'Pamatovačky',        shortName: 'Paměť',    icon: '🧠', color: '#D5B8E8', desc: 'Co bylo vpředu?' },
  { id: 'shapes',  name: 'Tvaroměsto',         shortName: 'Tvary',    icon: '🔺', color: '#F4B585', desc: 'Kolečka a hranáče' },
];

// ─── Úložiště vlastních úkolů ─────────────────────────────────
const CUSTOM_TASKS_KEY = 'pandicka-custom-tasks';
const DELETED_TASKS_KEY = 'pandicka-deleted-tasks';

function loadCustomTasks() {
  try {
    const arr = JSON.parse(localStorage.getItem(CUSTOM_TASKS_KEY) || '[]');
    // Dedupe by id (keep last occurrence — nejnovější verze) — sanitize pro případ staré corrupted db.
    const seen = new Set();
    const out = [];
    for (let i = arr.length - 1; i >= 0; i--) {
      if (arr[i] && arr[i].id && !seen.has(arr[i].id)) {
        seen.add(arr[i].id);
        out.unshift(arr[i]);
      }
    }
    return out;
  } catch { return []; }
}

function saveCustomTasks(arr) {
  // Dedupe při zápisu — last-write-wins.
  const seen = new Set();
  const out = [];
  for (let i = arr.length - 1; i >= 0; i--) {
    if (arr[i] && arr[i].id && !seen.has(arr[i].id)) {
      seen.add(arr[i].id);
      out.unshift(arr[i]);
    }
  }
  try { localStorage.setItem(CUSTOM_TASKS_KEY, JSON.stringify(out)); } catch {}
}

function loadDeletedIds() {
  try {
    return new Set(JSON.parse(localStorage.getItem(DELETED_TASKS_KEY) || '[]'));
  } catch { return new Set(); }
}

function saveDeletedIds(set) {
  try { localStorage.setItem(DELETED_TASKS_KEY, JSON.stringify([...set])); } catch {}
}

function getAllTasks() {
  const deleted = loadDeletedIds();
  const custom = loadCustomTasks();
  // Custom má přednost před base — pokud upravíš úkol ze základního katalogu,
  // base verze zmizí a zobrazí se jen custom override.
  const customIds = new Set(custom.map(t => t.id));
  const base = TASK_CATALOG.filter(t => !deleted.has(t.id) && !customIds.has(t.id));
  return [...base, ...custom];
}

function getTasksByCategory(categoryId) {
  return getAllTasks()
    .filter(t => t.categoryId === categoryId)
    .sort((a, b) => (a.level || 0) - (b.level || 0));
}

function getTaskById(id) {
  return getAllTasks().find(t => t.id === id);
}

function upsertTask(task) {
  const custom = loadCustomTasks();
  const idx = custom.findIndex(t => t.id === task.id);
  if (idx >= 0) custom[idx] = task;
  else custom.push(task);
  saveCustomTasks(custom);
}

function deleteTask(id) {
  const custom = loadCustomTasks();
  const isCustom = custom.some(t => t.id === id);
  if (isCustom) {
    saveCustomTasks(custom.filter(t => t.id !== id));
  } else {
    const del = loadDeletedIds();
    del.add(id);
    saveDeletedIds(del);
  }
}

function resetCatalog() {
  saveCustomTasks([]);
  saveDeletedIds(new Set());
}

function newTaskTemplate(categoryId) {
  const levelMax = Math.max(0, ...getTasksByCategory(categoryId).map(t => t.level || 0));
  return {
    id: 'custom-' + Date.now() + '-' + Math.random().toString(36).slice(2, 6),
    categoryId,
    level: levelMax + 1,
    title: 'Nový úkol',
    titleShort: 'Nový úkol',
    audio: 'Poslouchej pozorně.',
    reward: { xp: 10, coins: 5 },
    options: [
      { id: 'a', emoji: '🐼', label: 'Panda', correct: true },
      { id: 'b', emoji: '🐶', label: 'Pejsek', correct: false },
      { id: 'c', emoji: '🐱', label: 'Kočka', correct: false },
      { id: 'd', emoji: '🐰', label: 'Králík', correct: false },
    ],
  };
}

Object.assign(window, {
  TASK_CATALOG, CATEGORIES_META,
  getAllTasks, getTasksByCategory, getTaskById,
  upsertTask, deleteTask, resetCatalog, newTaskTemplate,
});
