// Global settings: admin password, AdSense config, premium plan & features.
// Persisted in localStorage 'aw.settings'.

const DEFAULT_SETTINGS = {
  // Site
  siteTitle: 'Malfino.de',
  language: 'de',
  logoSizeHeader: 48, // Höhe des Logos in der Navigation (px), in der Administration einstellbar
  logoSizeFooter: 64, // Höhe des Logos im Footer (px), in der Administration einstellbar

  // Admin
  adminPassword: 'admin123', // demo default, user should change

  // AdSense
  adsense: {
    enabled: false,
    publisherId: '',   // e.g. 'ca-pub-1234567890'
    slotHeader:  '',
    slotInline:  '',
    slotSidebar: '',
    showInPrint: true, // brand line on printouts (only when adsense enabled would show actual ads here in production)
  },

  // Premium plan
  premium: {
    enabled: true,
    name: 'Malfino Plus',
    priceMonthly: 2.99,
    priceYearly:  19.99,
    priceOnce:    3.99,
    currency: 'EUR',
    billing: { monthly: true, yearly: true, once: true },
    features: {
      noAds:           true, // Werbefrei surfen
      multiMappen:     true, // mehrere Sammelmappen
      noPrintBranding: true, // kein „Malfino.de" auf dem Ausdruck
      noPrintFooter:   true, // kein "Kostenlos zum Ausmalen"
      noPrintTitle:    true, // kein Titel oben auf dem Ausdruck
      noPrintAds:      true, // keine Werbung auf dem Ausdruck (Vorausplanung)
      earlyAccess:     true, // Neue Bilder zuerst sehen
    },
    descriptions: {
      noAds: 'Werbefrei surfen',
      multiMappen: 'Mehrere Sammelmappen erstellen',
      noPrintBranding: 'Kein Webseiten-Hinweis auf dem Ausdruck',
      noPrintFooter: 'Kein „Kostenlos zum Ausmalen"-Hinweis',
      noPrintTitle: 'Keine Titelzeile über dem Ausmalbild',
      noPrintAds: 'Keine Werbung auf dem Ausdruck',
      earlyAccess: 'Neue Bilder 7 Tage früher',
    },
  },

  // Payment providers
  payments: {
    sandboxMode:   true, // wenn aktiv → keine echten Buchungen
    stripe: {
      enabled:       false,
      publishableKey:'',
      secretKey:     '',
      webhookSecret: '',
      testPublishableKey: '',
      testSecretKey:      '',
    },
    paypal: {
      enabled:    false,
      clientId:   '',
      secret:     '',
      testClientId: '',
      testSecret:   '',
    },
    successUrl: '/profile?tab=premium&status=success',
    cancelUrl:  '/profile?tab=premium&status=cancel',
  },

  // Referral programme (friend invite → 1 month premium)
  referral: {
    enabled: true,
    rewardDays: 30,         // Tage Premium pro erfolgreich geworbenem Freund
    rewardForBoth: true,    // Werber UND Eingeladener bekommen Premium
    maxRewardsPerUser: 6,   // Max. Bonus-Monate pro Nutzer
    minPurchaseRequired: false, // ob Freund Premium kaufen muss damit's zählt
  },

  // Free-tier limits (if multiMappen is premium-only)
  limits: {
    freeMappenLimit: 1, // 0 = unlimited for free users
  },

  // Editable content of the static sub-pages (Impressum, Datenschutz, Lizenz, Über uns).
  // Each page = { title, kicker, blocks: [{ id, type, text }] }.
  // type: 'h2' | 'h3' | 'p' | 'ul' (one item per line) | 'note' (highlighted box).
  // Inline syntax inside text: **fett**, [Linktext](https://… oder mailto:…), Zeilenumbruch = neue Zeile.
  // Auf der Seite „Über uns" zusätzlich Platzhalter: {bilder} {kategorien} {profile} {auszeichnungen}.
  staticPages: {
    impressum: {
      title: 'Impressum', kicker: 'Pflichtangaben gemäß § 5 TMG',
      blocks: [
        { id: 'im1', type: 'h2', text: 'Anbieter' },
        { id: 'im2', type: 'p',  text: '**Malfino.de**\nMusterstraße 12\n20095 Hamburg\nDeutschland' },
        { id: 'im3', type: 'h2', text: 'Kontakt' },
        { id: 'im4', type: 'p',  text: 'Telefon: +49 (0) 40 1234 5678\nE-Mail: [hallo@malfino.de](mailto:hallo@malfino.de)' },
        { id: 'im5', type: 'h2', text: 'Vertretungsberechtigte' },
        { id: 'im6', type: 'p',  text: 'Inhaber:in, Vorname Nachname' },
        { id: 'im7', type: 'h2', text: 'Umsatzsteuer-ID' },
        { id: 'im8', type: 'p',  text: 'Gemäß § 27 a Umsatzsteuergesetz: DE 123 456 789' },
        { id: 'im9', type: 'h2', text: 'Verantwortlich für den Inhalt nach § 18 Abs. 2 MStV' },
        { id: 'im10', type: 'p', text: 'Vorname Nachname, Anschrift wie oben.' },
        { id: 'im11', type: 'h2', text: 'Streitschlichtung' },
        { id: 'im12', type: 'p', text: 'Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: [ec.europa.eu/consumers/odr](https://ec.europa.eu/consumers/odr/). Unsere E-Mail-Adresse findest du oben im Impressum.' },
        { id: 'im13', type: 'p', text: 'Wir sind weder verpflichtet noch bereit, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.' },
        { id: 'im14', type: 'note', text: 'Diese Vorlage ist ein Demo-Impressum. Bitte vor dem Live-Gang durch deine echten Daten ersetzen.' },
      ],
    },
    datenschutz: {
      title: 'Datenschutzerklärung', kicker: 'DSGVO-konform',
      blocks: [
        { id: 'ds1', type: 'h2', text: '1. Verantwortlicher' },
        { id: 'ds2', type: 'p',  text: 'Verantwortlich für die Datenverarbeitung auf dieser Webseite ist Malfino.de, Musterstraße 12, 20095 Hamburg, E-Mail: [datenschutz@malfino.de](mailto:datenschutz@malfino.de).' },
        { id: 'ds3', type: 'h2', text: '2. Welche Daten wir verarbeiten' },
        { id: 'ds4', type: 'h3', text: 'Beim Profil' },
        { id: 'ds5', type: 'ul', text: 'Name & E-Mail (für Login)\nPasswort (verschlüsselt gespeichert)\nFreiwillig: Bereich (Familie/Kita/Schule), Stadt & PLZ, Alter, Geschlecht, Anzahl Kinder, Lieblingsmotiv\nSammelmappen und Kommentare, die du erstellst' },
        { id: 'ds6', type: 'h3', text: 'Beim Besuch' },
        { id: 'ds7', type: 'ul', text: 'Standard-Server-Log (IP, Browser, Uhrzeit), nach 14 Tagen gelöscht\nAnonymisierte Reichweitenmessung (sofern du zugestimmt hast)\nGoogle AdSense-Cookies (sofern du zugestimmt hast)' },
        { id: 'ds8', type: 'h2', text: '3. Cookies' },
        { id: 'ds9', type: 'p',  text: 'Wir nutzen Cookies für notwendige Funktionen (Login, Sammelmappe), für anonyme Statistik und, mit deiner Einwilligung, für Werbung. Deine Einstellungen kannst du jederzeit im Footer unter „🍪 Cookie-Einstellungen" anpassen.' },
        { id: 'ds10', type: 'h2', text: '4. Rechtsgrundlage' },
        { id: 'ds11', type: 'p', text: 'Verarbeitung deiner Profildaten: Art. 6 Abs. 1 lit. b DSGVO (Vertrag). Cookies und Tracking: Art. 6 Abs. 1 lit. a DSGVO (Einwilligung). Server-Logs: Art. 6 Abs. 1 lit. f DSGVO (berechtigtes Interesse).' },
        { id: 'ds12', type: 'h2', text: '5. Deine Rechte' },
        { id: 'ds13', type: 'ul', text: 'Auskunft über gespeicherte Daten (Art. 15)\nBerichtigung (Art. 16) und Löschung (Art. 17)\nEinschränkung der Verarbeitung (Art. 18)\nDatenübertragbarkeit (Art. 20)\nWiderspruch (Art. 21), z. B. gegen Werbung\nBeschwerde bei der Aufsichtsbehörde' },
        { id: 'ds14', type: 'p', text: 'Dein Profil kannst du jederzeit selbst löschen unter **Mein Profil → Einstellungen → Profil löschen**.' },
        { id: 'ds15', type: 'h2', text: '6. Drittanbieter' },
        { id: 'ds16', type: 'ul', text: '**Google AdSense** (nur bei Einwilligung), Anzeigen, Mountain View, USA\n**PayPal**, Zahlungsabwicklung bei Premium-Kauf\n**Zippopotam**, Auflösung deiner PLZ in den Ort (anonym, ohne Cookies)' },
        { id: 'ds17', type: 'h2', text: '7. Kontakt & Beschwerde' },
        { id: 'ds18', type: 'p', text: 'Fragen oder Wünsche an: [datenschutz@malfino.de](mailto:datenschutz@malfino.de)\nZuständige Aufsicht: Hamburgischer Beauftragter für Datenschutz und Informationsfreiheit.' },
        { id: 'ds19', type: 'note', text: 'Diese Erklärung ist eine Demo-Vorlage, vor dem Live-Gang anwaltlich prüfen lassen.' },
      ],
    },
    lizenz: {
      title: 'Lizenz & Nutzung', kicker: 'Wofür darf ich die Bilder verwenden?',
      blocks: [
        { id: 'li1', type: 'h2', text: 'Kostenlos für private Nutzung' },
        { id: 'li2', type: 'p',  text: 'Alle Ausmalbilder auf Malfino.de darfst du **kostenlos herunterladen, ausdrucken und ausmalen**. Eine Anmeldung ist dafür nicht zwingend nötig, mit einem Profil kannst du aber Sammelmappen anlegen und Bilder kommentieren.' },
        { id: 'li3', type: 'h2', text: 'Erlaubt' },
        { id: 'li4', type: 'ul', text: 'Privates Ausmalen zuhause\nEinsatz in Kita, Hort, Schule, Therapie- und Tagespflege-Einrichtungen\nGeburtstagsfeiern und Kindergruppen\nTeilen mit Freund:innen und Kolleg:innen über den Link der Webseite' },
        { id: 'li5', type: 'h2', text: 'Nicht erlaubt (ohne unsere Zustimmung)' },
        { id: 'li6', type: 'ul', text: 'Kommerzieller Wiederverkauf der Bilder oder Print-Sammlungen\nVerwendung in eigenen Apps, Büchern oder Produkten\nBearbeitung der Bilder und Anbieten unter eigenem Namen\nMassenhaftes Crawling/Scrapen der Bilder' },
        { id: 'li7', type: 'h2', text: 'Premium-Vorteile' },
        { id: 'li8', type: 'p',  text: 'Mit **Malfino Plus** bekommst du u. a. werbefreie Ausdrucke (ohne den „Malfino.de"-Vermerk auf dem Papier), unbegrenzte Sammelmappen und Early Access auf neue Motive. Eine kommerzielle Lizenz ist damit nicht eingeschlossen, dafür schreib uns bitte direkt an.' },
        { id: 'li9', type: 'h2', text: 'Bildquellen' },
        { id: 'li10', type: 'p', text: 'Unsere Vorlagen werden von Illustrator:innen gezeichnet. Jeder Künstler wird auf der jeweiligen Detailseite genannt, sofern angegeben. Rechte verbleiben bei Malfino.de bzw. den jeweiligen Urheber:innen.' },
        { id: 'li11', type: 'h2', text: 'Kontakt für Lizenzanfragen' },
        { id: 'li12', type: 'p', text: 'Für kommerzielle Nutzung, Pressekooperationen oder eigene Editionen: [lizenz@malfino.de](mailto:lizenz@malfino.de)' },
      ],
    },
    about: {
      title: 'Über Malfino.de', kicker: 'Wer steckt hinter dieser Seite?',
      blocks: [
        { id: 'ab1', type: 'h2', text: 'Hallo!' },
        { id: 'ab2', type: 'p',  text: 'Malfino.de ist eine kleine Plattform für **kostenlose, liebevoll gezeichnete Malvorlagen**. Wir glauben: Ausmalen ist nicht nur Kinderkram, es entspannt, fokussiert und macht zu jedem Alter Spaß. Deshalb sammeln wir Motive, die in Kita, Schule, Familie und Therapie funktionieren.' },
        { id: 'ab3', type: 'h2', text: 'Worauf wir Wert legen' },
        { id: 'ab4', type: 'ul', text: '**Keine Anmeldung nötig**, um Bilder zu drucken, Profile sind freiwillig.\n**Familienfreundlich:** keine Tracker für Kinder, dezente Werbung, klare Sprache.\n**DSGVO-konform** mit echter Cookie-Auswahl statt Dark Patterns.\n**Premium ohne Lock-in**, du kannst jederzeit kündigen.' },
        { id: 'ab5', type: 'h2', text: 'Zahlen heute' },
        { id: 'ab6', type: 'ul', text: '{bilder} Ausmalbilder in {kategorien} Kategorien\n{profile} registrierte Profile\n{auszeichnungen} Auszeichnungen zum Sammeln' },
        { id: 'ab7', type: 'h2', text: 'Mach mit' },
        { id: 'ab8', type: 'p',  text: 'Wünschst du dir ein bestimmtes Motiv oder eine ganze neue Kategorie? Im Profil unter „✨ Vorschläge" kannst du uns sagen, was dir fehlt, wir prüfen jede Einreichung.' },
        { id: 'ab9', type: 'h2', text: 'Kontakt' },
        { id: 'ab10', type: 'p', text: 'Schreib uns: [hallo@malfino.de](mailto:hallo@malfino.de)' },
      ],
    },
  },
};

const _settingsKey = 'aw.settings';

const loadSettings = () => {
  try {
    const v = JSON.parse(localStorage.getItem(_settingsKey) || 'null');
    if (!v) return DEFAULT_SETTINGS;
    // Deep-merge missing keys
    return {
      ...DEFAULT_SETTINGS, ...v,
      adsense: { ...DEFAULT_SETTINGS.adsense, ...(v.adsense || {}) },
      premium: { ...DEFAULT_SETTINGS.premium, ...(v.premium || {}),
        features: { ...DEFAULT_SETTINGS.premium.features, ...((v.premium && v.premium.features) || {}) },
        descriptions: { ...DEFAULT_SETTINGS.premium.descriptions, ...((v.premium && v.premium.descriptions) || {}) },
        billing: { ...DEFAULT_SETTINGS.premium.billing, ...((v.premium && v.premium.billing) || {}) },
      },
      payments: { ...DEFAULT_SETTINGS.payments, ...(v.payments || {}),
        stripe: { ...DEFAULT_SETTINGS.payments.stripe, ...((v.payments && v.payments.stripe) || {}) },
        paypal: { ...DEFAULT_SETTINGS.payments.paypal, ...((v.payments && v.payments.paypal) || {}) },
      },
      referral: { ...DEFAULT_SETTINGS.referral, ...(v.referral || {}) },
      limits: { ...DEFAULT_SETTINGS.limits, ...(v.limits || {}) },
      staticPages: { ...DEFAULT_SETTINGS.staticPages, ...(v.staticPages || {}) },
    };
  } catch { return DEFAULT_SETTINGS; }
};
const saveSettings = (s) => { try { localStorage.setItem(_settingsKey, JSON.stringify(s)); } catch {} };

// React hook for settings, subscribes to storage changes so any update propagates.
const useSettings = () => {
  const [s, setS] = React.useState(loadSettings);
  React.useEffect(() => {
    const handler = (e) => { if (e.key === _settingsKey) setS(loadSettings()); };
    const customHandler = () => setS(loadSettings());
    window.addEventListener('storage', handler);
    window.addEventListener('aw:settings-changed', customHandler);
    return () => {
      window.removeEventListener('storage', handler);
      window.removeEventListener('aw:settings-changed', customHandler);
    };
  }, []);
  const update = React.useCallback((partial) => {
    setS(prev => {
      const next = typeof partial === 'function' ? partial(prev) : { ...prev, ...partial };
      saveSettings(next);
      window.dispatchEvent(new CustomEvent('aw:settings-changed'));
      return next;
    });
  }, []);
  return [s, update];
};

// User premium status (derived from user.premium = { active, cycle, since, expiresAt })
// A one-time month purchase (cycle 'once') or a referral bonus carries an expiresAt -
// once that date has passed the user is no longer premium and must buy again.
const isUserPremium = (user) => {
  if (!(user && user.premium && user.premium.active)) return false;
  const exp = user.premium.expiresAt;
  if (exp && new Date(exp).getTime() < Date.now()) return false;
  return true;
};

// === AdBanner placeholder ===
// Renders a placeholder banner. If AdSense is enabled in settings, shows the slot ID.
// Hidden entirely if user is premium (noAds feature) or AdSense disabled.
const AdBanner = ({ slot = 'inline', label = 'Anzeige', size = 'leaderboard', user, className = '' }) => {
  const [settings] = useSettings();
  const premium = isUserPremium(user);
  if (premium && settings.premium.features.noAds) return null;
  if (!settings.adsense.enabled) return null;
  const slotId = settings.adsense[`slot${slot[0].toUpperCase()}${slot.slice(1)}`] || '-';
  const heights = { leaderboard: 'h-28', medium: 'h-64', square: 'h-52', large: 'h-80' };
  return (
    <div className={cls("relative rounded-2xl bg-gradient-to-br from-cream to-paper ring-2 ring-line ring-dashed overflow-hidden flex flex-col items-center justify-center", heights[size] || heights.leaderboard, className)}>
      <span className="absolute top-2 left-3 text-[10px] uppercase tracking-wider font-extrabold text-inkSoft bg-paper px-2 py-0.5 rounded-full ring-1 ring-line">{label}</span>
      <div className="flex items-center gap-3">
        <span className="inline-flex w-12 h-12 rounded-2xl bg-paper ring-1 ring-line items-center justify-center text-2xl">📢</span>
        <div className="text-left">
          <div className="font-display text-lg font-extrabold leading-tight">Google AdSense</div>
          <div className="text-[12px] text-inkSoft mt-0.5">
            <span className="font-mono">{settings.adsense.publisherId || 'ca-pub-…'}</span> · slot <span className="font-mono">{slotId || '-'}</span>
          </div>
        </div>
      </div>
      <div className="absolute bottom-2 right-3 text-[10px] text-inkSoft/60 font-bold">{size}</div>
    </div>
  );
};

Object.assign(window, {
  DEFAULT_SETTINGS, loadSettings, saveSettings, useSettings,
  isUserPremium, AdBanner,
});
