/**
 * Out-Meilenstein-Sprüche: alle 100 Outs bis 10'000.
 * Steigende Energie in Text + Animations-Tier (1–6).
 */
(function initChillicollectivoOutMilestoneTips(global) {
  const HANDCRAFTED = {
    100: 'WOW 100 OUTS! Nur noch 900!!',
    200: '200!! Weiter gehts..!!',
    300: '300!! Du willst es mir heute zeigen, oder?',
    400: '400!! Heute bist du gut drauf – schaffst du nochmal 400? ;)',
    500: '500!! Wenn du immer so übertreibst, machst du hier richtig Patte!',
    600: '600!!!! Jetzt aber wirklich – du bist auf dem Weg in die Hall of Fame!!',
    700: '700!!!!! Danke für deinen Einsatz!! Weiter gehts, das schaffst du!!',
    800: '800!! Ich denk du weisst was das heisst – nur noch 200 bis zur Hälfte!! :D',
    900: '900!! Du bist einfach eine Rakete!!',
    1000: '1000!! Vierstellig – wie dein Monatsverdienst!!',
    2000: '2000!!!! ZWEI RIESENTONNEN CHILIS – du bist nicht mehr zu stoppen!!',
    3000: '3000!!!!! DREI TAUSEND!! Die Konkurrenz schläft, du nicht!!',
    4000: '4000!!!!!! VIER RIESEN!! Heute machst du die Plattform alleine warm!!',
    5000: '5000!!!!!!! HALBZEIT ZU 10\'000 – du bist eine Maschine!!!!',
    6000: '6000!!!!!!!! SECHS TAUSEND!! Unglaublich – du bist nicht zu stoppen!!',
    7000: '7000!!!!!!!!! SIEBEN TAUSEND!! Fast schon Chili-Legende!!',
    8000: '8000!!!!!!!!!! ACHT RIESEN!! Noch 2000 – dann bist du unsterblich!!',
    9000: '9000!!!!!!!!!!! NEUN TAUSEND!! EINER FEHLT NOCH!!!!',
    10000: '10000!!!!!!!!!!!! ZEHN TAUSEND OUTS – DU BIST EINE LEGENDE!!!!!!',
  };

  const BLOCK_PHRASES = [
    [
      '{n}!! Erster Block nach {k} – du findest den Rhythmus!',
      '{n}!! Zweihundert mehr – der Flow sitzt!',
      '{n}!! Drei Runden à hundert – konstant stark!',
      '{n}!! Vierhundert im Tritt – so gewinnt man den Tag!',
      '{n}!! Fünfhundert mehr – die INS spüren deinen Einsatz!',
      '{n}!! Sechshundert! Du bleibst scharf wie Chilis!',
      '{n}!! Siebenhundert – kein Nachlassen, nur Tempo!',
      '{n}!! Achthundert! Noch ein Stück bis zum nächsten Tausender!',
      '{n}!! Neunhundert! Gleich platzt die nächste Runde!',
    ],
    [
      '{n}!! Über {k} – du heizt den Chat richtig ein!',
      '{n}!! Zweihundert drauf – Kunden antworten dir gerne!',
      '{n}!! Dreihundert mehr – dein Takt ist unschlagbar!',
      '{n}!! Vierhundert! Heute läuft\'s wie am Schnürchen!',
      '{n}!! Fünfhundert! So baut man sich einen goldenen Nachmittag!',
      '{n}!! Sechshundert! Weiter – du bist in Bestform!',
      '{n}!! Siebenhundert! Die Vorschau glüht, du auch!',
      '{n}!! Achthundert! Kurz vor dem nächsten Meilenstein!',
      '{n}!! Neunhundert! Noch einmal vollgas, dann {nextK}!',
    ],
    [
      '{n}!! {k} geknackt – jetzt wird\'s ernst!',
      '{n}!! Zweihundert im dritten Tausender – brutal konstant!',
      '{n}!! Dreihundert mehr! Du bist der Turbo im Team!',
      '{n}!! Vierhundert! Jeder Out zählt – du lieferst!',
      '{n}!! Fünfhundert! Halbzeit im Block – weiter so!',
      '{n}!! Sechshundert! Deine Finger sind on fire!',
      '{n}!! Siebenhundert! Die Chilis stehen in Flammen!',
      '{n}!! Achthundert! Kurz vorm nächsten Knaller!',
      '{n}!! Neunhundert! Gleich {nextK} – bereit?',
    ],
    [
      '{n}!! Vier Tausender-Club – respekt!',
      '{n}!! Zweihundert mehr – du machst das Feld dir warm!',
      '{n}!! Dreihundert! Konzentration wie ein Profi!',
      '{n}!! Vierhundert! Heute ist dein Tag, oder?',
      '{n}!! Fünfhundert! Die Konkurrenz kann einpacken!',
      '{n}!! Sechshundert! Weiter – du bist nicht müde!',
      '{n}!! Siebenhundert! Nur noch drei Häuser bis {nextK}!',
      '{n}!! Achthundert! Der Zähler kocht – du auch!',
      '{n}!! Neunhundert! Noch ein Schub – dann explodiert\'s!',
    ],
    [
      '{n}!! Fünf Tausend Basis – du bist eine Wucht!',
      '{n}!! Zweihundert drauf – Champagner-Stimmung!',
      '{n}!! Dreihundert! Jeder Kunde will dich heute!',
      '{n}!! Vierhundert! Dein Einsatz zahlt sich aus!',
      '{n}!! Fünfhundert! Mitte im Block – voll Fokus!',
      '{n}!! Sechshundert! Du schreibst Geschichte!',
      '{n}!! Siebenhundert! Noch zwei Schritte bis {nextK}!',
      '{n}!! Achthundert! Die Legende wächst!',
      '{n}!! Neunhundert! Kurz vor dem nächsten Feuerwerk!',
    ],
    [
      '{n}!! Sechs Riesen – du bist nicht normal!',
      '{n}!! Zweihundert mehr – pure Dominanz!',
      '{n}!! Dreihundert! Dein Tastatur-Game ist elite!',
      '{n}!! Vierhundert! Heute knackst du alles!',
      '{n}!! Fünfhundert! Weiter – du bist im Rausch!',
      '{n}!! Sechshundert! Die Plattform zittert!',
      '{n}!! Siebenhundert! Noch ein Tausender in Reichweite!',
      '{n}!! Achthundert! Du brennst für jeden Out!',
      '{n}!! Neunhundert! Gleich {nextK} – halte durch!',
    ],
    [
      '{n}!! Sieben Tausend! Du bist schon Mythos!',
      '{n}!! Zweihundert mehr – unaufhaltsam!',
      '{n}!! Dreihundert! Jeder Satz sitzt perfekt!',
      '{n}!! Vierhundert! Dein Output ist Wahnsinn!',
      '{n}!! Fünfhundert! Mitte im Block – kein Stopp!',
      '{n}!! Sechshundert! Die Chili-Halle jubelt!',
      '{n}!! Siebenhundert! Noch drei Hundert bis {nextK}!',
      '{n}!! Achthundert! Du reitest auf der Erfolgswelle!',
      '{n}!! Neunhundert! Der Gipfel winkt!',
    ],
    [
      '{n}!! Acht Riesen – fast am Ziel!',
      '{n}!! Zweihundert mehr – du atmest Feuer!',
      '{n}!! Dreihundert! Konzentration auf Maximum!',
      '{n}!! Vierhundert! Jeder Out ein Kunstwerk!',
      '{n}!! Fünfhundert! Halbzeit – dann geht\'s zum Gipfel!',
      '{n}!! Sechshundert! Du bist eine Naturgewalt!',
      '{n}!! Siebenhundert! Nur noch {remain} bis 10\'000!',
      '{n}!! Achthundert! Die Ziellinie glüht!',
      '{n}!! Neunhundert! EINER FEHLT – dann {nextK}!',
    ],
    [
      '{n}!! Neun Tausend – du riechst den Sieg!',
      '{n}!! Zweihundert mehr – LETZTE ETAPPE!',
      '{n}!! Dreihundert! Jeder Out ein Schritt zur Legende!',
      '{n}!! Vierhundert! Du gibst alles – RESPEKT!',
      '{n}!! Fünfhundert! Halbzeit im letzten Block!',
      '{n}!! Sechshundert! Die 10\'000 warten auf DICH!',
      '{n}!! Siebenhundert! Nur noch {remain} – DU SCHAFFST DAS!',
      '{n}!! Achthundert! Gänsehaut-Modus aktiviert!',
      '{n}!! Neunhundert! NOCH HUNDERT – DANN BIST DU LEGENDE!',
    ],
  ];

  function formatThousands(n) {
    return n >= 1000 ? `${Math.floor(n / 1000)}'${String(n % 1000).padStart(3, '0')}` : String(n);
  }

  function exclamationBurst(count) {
    const base = 2 + Math.floor(count / 500);
    return '!'.repeat(Math.min(base, 12));
  }

  function animationTier(count) {
    if (count >= 7500) return 6;
    if (count >= 5500) return 5;
    if (count >= 4000) return 4;
    if (count >= 2500) return 3;
    if (count >= 1500) return 2;
    return 1;
  }

  function tipDurationMs(tier) {
    return 4800 + tier * 600;
  }

  function buildGeneratedTip(count) {
    const thousands = Math.floor(count / 1000);
    const hundreds = Math.floor((count % 1000) / 100);
    if (hundreds < 1 || hundreds > 9 || thousands < 1 || thousands > 9) return null;

    const block = BLOCK_PHRASES[thousands - 1];
    if (!block) return null;

    const template = block[hundreds - 1];
    const k = formatThousands(thousands * 1000);
    const nextK = formatThousands((thousands + 1) * 1000);
    const remain = formatThousands(10000 - count);
    const n = formatThousands(count);
    const burst = exclamationBurst(count);

    let text = template
      .replace(/\{n\}/g, n)
      .replace(/\{k\}/g, k)
      .replace(/\{nextK\}/g, nextK)
      .replace(/\{remain\}/g, remain);

    if (!/!{2,}/.test(text.slice(-8))) {
      text = text.replace(/!+$/, '') + burst;
    }

    const tier = animationTier(count);
    return {
      text,
      milestoneTier: tier,
      animateWords: tier >= 3,
      animateLetters: tier >= 5,
      durationMs: tipDurationMs(tier),
    };
  }

  function getOutMilestoneTip(count) {
    const n = Math.floor(Number(count) || 0);
    if (n < 100 || n > 10000 || n % 100 !== 0) return null;

    if (HANDCRAFTED[n]) {
      const tier = animationTier(n);
      return {
        text: HANDCRAFTED[n],
        milestoneTier: tier,
        animateWords: tier >= 3,
        animateLetters: tier >= 5,
        durationMs: tipDurationMs(tier),
      };
    }

    return buildGeneratedTip(n);
  }

  global.chillicollectivoGetOutMilestoneTip = getOutMilestoneTip;
})(typeof globalThis !== 'undefined' ? globalThis : window);
