<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        // Legal Pages table
        if (!Schema::hasTable('legal_pages')) {
            Schema::create('legal_pages', function (Blueprint $table) {
                $table->id();
                $table->string('slug', 32);
                $table->json('title');
                $table->json('body_markdown');
                $table->string('locale_fallback', 5)->default('de');
                $table->integer('version')->default(1);
                $table->timestamp('effective_from')->nullable();
                $table->boolean('is_published')->default(false);
                $table->timestamps();
                $table->unique(['slug', 'version']);
            });
        }

        // Seed data if table exists (idempotent: updateOrInsert)
        if (Schema::hasTable('legal_pages')) {
            $now = now()->toDateString();

            $rows = [
                [
                    'slug' => 'impressum',
                    'version' => 1,
                    'title' => json_encode(['de' => 'Impressum'], JSON_UNESCAPED_UNICODE),
                    'body_markdown' => json_encode(['de' => $this->impressumDe()], JSON_UNESCAPED_UNICODE),
                    'locale_fallback' => 'de',
                    'effective_from' => $now,
                    'is_published' => true,
                    'created_at' => now(),
                    'updated_at' => now(),
                ],
                [
                    'slug' => 'datenschutz',
                    'version' => 1,
                    'title' => json_encode(['de' => 'Datenschutzerklärung'], JSON_UNESCAPED_UNICODE),
                    'body_markdown' => json_encode(['de' => $this->datenschutzDe($now)], JSON_UNESCAPED_UNICODE),
                    'locale_fallback' => 'de',
                    'effective_from' => $now,
                    'is_published' => true,
                    'created_at' => now(),
                    'updated_at' => now(),
                ],
                [
                    'slug' => 'agb',
                    'version' => 1,
                    'title' => json_encode(['de' => 'Allgemeine Geschäftsbedingungen'], JSON_UNESCAPED_UNICODE),
                    'body_markdown' => json_encode(['de' => $this->agbDe($now)], JSON_UNESCAPED_UNICODE),
                    'locale_fallback' => 'de',
                    'effective_from' => $now,
                    'is_published' => true,
                    'created_at' => now(),
                    'updated_at' => now(),
                ],
            ];

            foreach ($rows as $r) {
                DB::table('legal_pages')->updateOrInsert(
                    ['slug' => $r['slug'], 'version' => $r['version']],
                    $r
                );
            }
        }
    }

    public function down(): void
    {
        if (app()->environment('local', 'testing')) {
            if (Schema::hasTable('legal_pages')) {
                DB::table('legal_pages')->whereIn('slug', ['impressum', 'datenschutz', 'agb'])->delete();
                Schema::dropIfExists('legal_pages');
            }
        }
    }

    private function impressumDe(): string
    {
        return <<<MD
# Impressum

Anbieter dieser Seiten:

Sören Eberhardt‑Biermann  
Schweriner Str. 15  
19306 Neustadt‑Glewe, Deutschland

Kontakt:

- Telefon mobil: 0173 / 9266802  
- Fax: 038757 / 54169  
- E‑Mail: soeren@sebfoto.de  
- Website: https://sebfoto.de

Umsatzsteuer‑Identifikationsnummer gemäß § 27a UStG: (falls vorhanden, bitte ergänzen)

Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV:  
Sören Eberhardt‑Biermann, Anschrift wie oben

Haftung für Inhalte:

Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt.

Haftung für Links:

Unser Angebot enthält ggf. Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber verantwortlich.

Urheberrecht:

Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Vervielfältigung, Bearbeitung, Verbreitung oder jede Art der Verwertung außerhalb der Grenzen des Urheberrechts bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers.
MD;
    }

    private function datenschutzDe(string $date): string
    {
        return <<<MD
# Datenschutzerklärung

Diese Datenschutzerklärung informiert dich über die Verarbeitung personenbezogener Daten bei Nutzung der Fotospiel‑Plattform (Gast‑PWA, Admin‑PWA, Super‑Admin Backend).

Verantwortlicher:

Sören Eberhardt‑Biermann, Schweriner Str. 15, 19306 Neustadt‑Glewe, Deutschland  
E‑Mail: soeren@sebfoto.de

Zwecke der Verarbeitung:

- Bereitstellung der Plattform, Ausspielen von Inhalten, Upload und Anzeige von Veranstaltungsfotos  
- Moderation und Auswertung (z. B. Likes)  
- Sicherheit, Missbrauchs‑/Fehleranalyse, Systemlogs

Rechtsgrundlagen (DSGVO):

- Art. 6 Abs. 1 lit. b (Vertrag/Teilnahmebedingungen der Veranstaltung)  
- Art. 6 Abs. 1 lit. f (berechtigtes Interesse an sicherem, funktionsfähigem Betrieb)  
- Art. 6 Abs. 1 lit. a (Einwilligung, sofern erforderlich; z. B. für Push/Benachrichtigungen)

Kategorien verarbeiteter Daten:

- Foto‑Uploads (Bilddateien, optional Metadaten wie Emotion/Task), Gerätekennung (pseudonym) für Likes/Uploads  
- Ereignis‑/Nutzungsdaten (Zeitpunkt, Anzahl der Uploads/Likes), Protokolldaten (IP, HTTP‑Header, Fehlerlogs)

Speicherdauer:

Fotos und Ereignisdaten werden für die Dauer der Veranstaltung und eine anschließende Veröffentlichungs‑/Auswahlphase gespeichert. Logdaten werden in der Regel nach 14–30 Tagen gelöscht. Abweichungen werden tenant‑spezifisch dokumentiert.

Empfänger/Weitergabe:

Interne Empfänger (Administratoren/Moderatoren der jeweiligen Veranstaltung). Keine Weitergabe an Dritte außer im Rahmen der Auftragsverarbeitung (Hosting/Backup) oder bei gesetzlicher Verpflichtung.

Hosting/Verarbeitung:

Die Plattform wird auf eigenem/angemietetem Server gehostet. Mediendateien werden über die Anwendung bereitgestellt (Symlink `/storage`).

Cookies/Tracking:

Die Gast‑PWA nutzt keine Tracking‑Cookies. Es werden nur technisch notwendige Local‑Storage/IndexedDB‑Einträge und ein Pseudonym‑Geräte‑Identifikator für Uploads/Likes verwendet. Optionaler Service‑Worker Cache dient der Offline‑Nutzung.

Deine Rechte:

Auskunft, Berichtigung, Löschung, Einschränkung, Datenübertragbarkeit, Widerspruch (Art. 15–21 DSGVO). Beschwerden an die zuständige Aufsichtsbehörde sind möglich.

Kontakt für Datenschutzanfragen:  
E‑Mail: soeren@sebfoto.de

Stand: {$date}
MD;
    }

    private function agbDe(string $date): string
    {
        return <<<MD
# Allgemeine Geschäftsbedingungen (AGB)

Diese AGB regeln die Nutzung der Fotospiel‑Plattform durch Veranstalter (Tenant) und Gäste (Teilnehmer).

1. Leistungsumfang

Fotospiel ermöglicht das Erstellen, Hochladen, Moderieren und Anzeigen von Fotos im Rahmen veranstaltungsbezogener Galerien. Zusatzfunktionen (Likes, Aufgaben/Emotions, Slideshow) können variieren.

2. Registrierung/Vertragsschluss

Veranstalter erhalten einen Zugang (Tenant‑Admin). Gäste nutzen die PWA ohne Registrierung; Teilnahmebedingungen werden durch den Veranstalter kommuniziert.

3. Nutzungsrechte an Uploads

Gäste räumen dem Veranstalter und dem Plattformbetreiber ein einfaches, auf die jeweilige Veranstaltung beschränktes Nutzungsrecht zur Anzeige/Moderation/Präsentation ein. Weitergehende Nutzung (z. B. Social‑Media/Marketing) bedarf der Einwilligung des Rechteinhabers, sofern nicht gesetzlich zulässig.

4. Verantwortlichkeiten/Moderation

Veranstalter sind inhaltlich verantwortlich für ihre Events und moderieren Inhalte. Der Betreiber kann Inhalte bei Rechtsverstößen entfernen oder den Zugang sperren.

5. Verbotene Inhalte

Keine rechtswidrigen, diskriminierenden, pornografischen, gewaltverherrlichenden oder die Rechte Dritter verletzenden Inhalte. Keine Uploads mit personenbezogenen Daten Dritter ohne Rechtsgrundlage/Einwilligung.

6. Verfügbarkeit/Haftung

Es besteht kein Anspruch auf permanente Verfügbarkeit. Der Betreiber haftet bei Vorsatz und grober Fahrlässigkeit; im Übrigen nur bei Verletzung wesentlicher Vertragspflichten, begrenzt auf vorhersehbare Schäden.

7. Datenschutz

Es gilt die Datenschutzerklärung. Veranstalter sind für ihre rechtliche Grundlage gegenüber Gästen verantwortlich (z. B. Einwilligungen/Aushänge).

8. Laufzeit/Kündigung

Nutzung ist eventbezogen. Der Betreiber kann bei Verstößen kündigen oder den Zugang sperren.

9. Schlussbestimmungen

Es gilt deutsches Recht. Gerichtsstand ist, soweit zulässig, der Sitz des Betreibers. Sollten einzelne Bestimmungen unwirksam sein, bleibt der Vertrag im Übrigen wirksam.

Stand: {$date}
MD;
    }
};