/** Flarlo Community – Client-Prüfung (spiegelt community.js). */
(function (global) {
  const HATE_PATTERNS = [
    /\bheil\s+hitler\b/i,
    /\bsieg\s+heil\b/i,
    /\bwhite\s+power\b/i,
    /\b14\s*\/\s*88\b/,
    /\b88\s*\/\s*14\b/,
    /\bnsdap\b/i,
    /\bswastika\b/i,
    /\bhakenkreuz\b/i,
  ];

  const HATE_SLURS = [
    'kanake', 'kanaken', 'neger', 'negerin', 'zigeuner', 'gypsy',
    'schwuchtel', 'schwuchteln', 'transen', 'tranny', 'faggot', 'fag',
    'kike', 'spick', 'spic', 'chink', 'gook', 'wetback',
    'judensau', 'judenschwein', 'untermensch', 'rassenvermischung',
    'reichsbuerger', 'volksverraeter',
  ];

  const ATTACK_PHRASES = [
    'kill yourself', 'kys', 'go die', 'hang yourself', 'neck yourself',
    'geh sterben', 'stirb endlich', 'bring dich um', 'haeng dich auf', 'häng dich auf',
    'niemand mag dich', 'alle hassen dich', 'du bist wertlos', 'du bist nutzlos',
    'du bist erbärmlich', 'du bist erbaermlich', 'du bist hässlich', 'du bist haesslich',
    'lass uns mobben', 'mobbt ihn', 'mobbt sie', 'mobbt den', 'mobbt die',
    'wir mobben', 'cybermobbing gegen', 'hetzt gegen', 'hetze gegen',
    'du opfer', 'du spasti', 'du spacken', 'du behinderter', 'du behinderte',
    'hurensohn', 'hurensöhne', 'fick dich', 'verpiss dich',
    'scheiss auf dich', 'scheiß auf dich', 'fette sau', 'fettarsch',
  ];

  function escapeRegex(s) {
    return String(s).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  }

  function normalizeText(text) {
    return String(text || '')
      .toLowerCase()
      .replace(/ä/g, 'ae')
      .replace(/ö/g, 'oe')
      .replace(/ü/g, 'ue')
      .replace(/ß/g, 'ss')
      .replace(/[^a-z0-9\s/]/g, ' ')
      .replace(/\s+/g, ' ')
      .trim();
  }

  function check(text) {
    const raw = String(text || '').trim();
    if (!raw) return { ok: true };

    const lower = raw.toLowerCase();
    const norm = normalizeText(raw);

    for (let i = 0; i < HATE_PATTERNS.length; i++) {
      if (HATE_PATTERNS[i].test(lower) || HATE_PATTERNS[i].test(norm)) {
        return { ok: false, reason: 'Hassrede oder verbotene Symbole sind nicht erlaubt.' };
      }
    }

    for (let i = 0; i < HATE_SLURS.length; i++) {
      const re = new RegExp('\\b' + escapeRegex(HATE_SLURS[i]) + '\\b', 'i');
      if (re.test(lower) || re.test(norm)) {
        return { ok: false, reason: 'Hassrede ist nicht erlaubt.' };
      }
    }

    for (let i = 0; i < ATTACK_PHRASES.length; i++) {
      const p = ATTACK_PHRASES[i].toLowerCase();
      const pNorm = normalizeText(ATTACK_PHRASES[i]);
      if (lower.indexOf(p) !== -1 || norm.indexOf(pNorm) !== -1) {
        return { ok: false, reason: 'Beleidigungen, Mobbing und Drohungen sind nicht erlaubt.' };
      }
    }

    return { ok: true };
  }

  global.VlCommunity = { check };
})(typeof window !== 'undefined' ? window : globalThis);
