<?php
// admin/listen_create.php

session_start();
require_once __DIR__ . '/../includes/init.php';
require_once __DIR__ . '/../auth/AuthController.php';

$auth = new AuthController();
if (!$auth->isLoggedIn()) {
    header('Location: ' . $adminLoginPath);
    exit;
}

$db = Database::getInstance();
$title = 'Neue Liste erstellen';
$error = '';

$fromIdentities = [];
$sqlFromIdentities = "SELECT id, name, email FROM sender_identities WHERE is_active = 1 ORDER BY name ASC";
try {
    $fromIdentities = $db->query($sqlFromIdentities)->fetchAll();
    ErrorLogger::logSqlSuccess('listen_create: load sender identities | SQL: ' . $sqlFromIdentities . ' | params: []');
} catch (Throwable $e) {
    ErrorLogger::logSqlError('listen_create: load sender identities failed | SQL: ' . $sqlFromIdentities . ' | params: [] | error: ' . $e->getMessage());
    $fromIdentities = [];
    if ($error === '') {
        $error = 'Fehler beim Laden der Absender.';
    }
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name'] ?? '');
    $description = trim($_POST['description'] ?? '');
    $requiresDoi = isset($_POST['requires_doi']) ? 1 : 0;
    $notifyOnSignup = isset($_POST['notify_on_signup']) ? 1 : 0;
    $fromIdentityId = $_POST['from_identity_id'] ?? null;

    if ($name === '') {
        $error = 'Der Name der Liste ist erforderlich.';
    } else {
        try {
            $db->beginTransaction();

            $stmt = $db->prepare('INSERT INTO lists (name, description, requires_doi, from_identity_id, notify_on_signup) VALUES (?, ?, ?, ?, ?)');
            $stmt->execute([$name, $description, $requiresDoi, $fromIdentityId, $notifyOnSignup]);
            $listId = $db->lastInsertId();

            $doiTemplateId = null;
            $welcomeTemplateId = null;

            if ($requiresDoi) {
                $stmt = $db->prepare('INSERT INTO email_templates (name, subject, body_html, layout_id) VALUES (?, ?, ?, NULL)');
                $stmt->execute([
                    '[DOI] Bestätigung erforderlich - ' . $name,
                    'Bitte bestätige deine Anmeldung zur Liste "' . $name . '"',
                    '<p>Hallo,</p><p>bitte bestätige deine Anmeldung zur Liste "<strong>' . htmlspecialchars($name) . '</strong>" durch Klick auf den folgenden Link:</p><p><a href="[confirm_url]">Jetzt bestätigen</a></p><p>Danke!</p>'
                ]);
                $doiTemplateId = $db->lastInsertId();
            }

            $stmt = $db->prepare('INSERT INTO email_templates (name, subject, body_html, layout_id) VALUES (?, ?, ?, NULL)');
            $stmt->execute([
                '[Welcome] Willkommen in der Liste - ' . $name,
                'Willkommen in der Liste "' . $name . '"',
                '<p>Vielen Dank für deine Anmeldung zur Liste "<strong>' . htmlspecialchars($name) . '</strong>".</p><p>Du wirst in Kürze weitere Nachrichten erhalten.</p>'
            ]);
            $welcomeTemplateId = $db->lastInsertId();

            $stmt = $db->prepare('UPDATE lists SET doi_template_id = ?, welcome_template_id = ? WHERE id = ?');
            $stmt->execute([$doiTemplateId, $welcomeTemplateId, $listId]);

            $db->commit();
            ErrorLogger::log("Neue Liste '$name' wurde erstellt", 'INFO');

            $userId = $_SESSION['admin_id'] ?? ($_SESSION['user_id'] ?? 0);
            if ($userId) {
                logSettingChange($userId, 'create_list', 'lists', json_encode([
                    'list_id' => $listId,
                    'name' => $name,
                    'requires_doi' => $requiresDoi,
                    'from_identity_id' => $fromIdentityId,
                    'notify_on_signup' => $notifyOnSignup,
                    'doi_template_id' => $doiTemplateId,
                    'welcome_template_id' => $welcomeTemplateId
                ], JSON_UNESCAPED_UNICODE));
            }

            header('Location: listen.php');
            exit;
        } catch (Exception $e) {
            $db->rollBack();
            ErrorLogger::log('Fehler beim Erstellen einer Liste: ' . $e->getMessage(), 'ERROR');
            $error = 'Fehler beim Speichern: ' . $e->getMessage();
        }
    }
}

$pageHelp = renderPageHelp([
    'sections' => [
        [
            'heading' => 'Was macht diese Seite?',
            'items' => [
                'Hier legst du eine neue Liste für Empfänger und Anmeldungen an.',
                'Beim Speichern werden passende Standard-Templates für Begrüßung und optional Double-Opt-In angelegt.',
            ],
        ],
        [
            'heading' => 'Was muss ich eingeben oder auswählen?',
            'items' => [
                'Vergib einen klaren Listennamen und bei Bedarf eine kurze Beschreibung.',
                'Wähle den Absender aus, der für diese Liste verwendet werden soll.',
            ],
        ],
        [
            'heading' => 'Worauf sollte ich achten?',
            'items' => [
                'Aktiviere Double-Opt-In, wenn Anmeldungen erst nach Bestätigung gültig sein sollen.',
                'Die Benachrichtigung an den Absender ist nur sinnvoll, wenn neue Formular-Anmeldungen intern gemeldet werden sollen.',
            ],
        ],
    ],
]);

ob_start();
?>
<div class="page-header h2">Neue Liste erstellen</div>
<?= $pageHelp ?>

<?php if ($error): ?>
  <div class="alert alert-danger auto-dismiss"><?= htmlspecialchars($error) ?></div>
<?php endif; ?>

<form method="post">
  <div class="mb-3">
    <label for="name" class="form-label">Name der Liste</label>
    <input type="text" name="name" id="name" class="form-control" required>
  </div>

  <div class="mb-3">
    <label for="description" class="form-label">Beschreibung</label>
    <textarea name="description" id="description" class="form-control"></textarea>
  </div>

  <div class="form-check mb-3">
    <input class="form-check-input" type="checkbox" name="requires_doi" id="requires_doi" value="1" checked>
    <label class="form-check-label" for="requires_doi">
      Double-Opt-In erforderlich
    </label>
  </div>

  <div class="form-check mb-3">
    <input class="form-check-input" type="checkbox" name="notify_on_signup" id="notify_on_signup" value="1">
    <label class="form-check-label" for="notify_on_signup">
      Absender bei neuer Formular-Anmeldung informieren
    </label>
  </div>

  <div class="mb-3">
    <label for="from_identity_id" class="form-label">Absender auswählen</label>
    <select name="from_identity_id" id="from_identity_id" class="form-select" required>
      <option value="">-- Absender wählen --</option>
      <?php foreach ($fromIdentities as $sender): ?>
        <option value="<?= $sender['id'] ?>">
          <?= htmlspecialchars($sender['name']) ?> &lt;<?= htmlspecialchars($sender['email']) ?>&gt;
        </option>
      <?php endforeach; ?>
    </select>
  </div>

  <button type="submit" class="btn btn-primary">Speichern</button>
  <a href="listen.php" class="btn btn-secondary">Abbrechen</a>
</form>

<script>
setTimeout(() => {
  document.querySelectorAll('.auto-dismiss').forEach(el => el.remove());
}, 5000);
</script>

<?php
$pageContent = ob_get_clean();
include __DIR__ . '/template.php';
