<?php
// admin/formulare/formular_create.php

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

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

$title = 'Neues Formular erstellen';
$error = '';
$success = '';

$db = Database::getInstance();

try {
    // Listen und Felder laden
    $listen = $db->query("SELECT id, name FROM lists ORDER BY name")->fetchAll();
    ErrorLogger::logSqlSuccess('formular_create_liste_laden | message: Listen geladen.');

    $felder = $db->query("SELECT id, field_key, label FROM custom_field_definitions ORDER BY label")->fetchAll();
    ErrorLogger::logSqlSuccess('formular_create_felder_laden | message: Felder geladen.');

    $tags = $db->query("SELECT id, name FROM tags ORDER BY name")->fetchAll();
    ErrorLogger::logSqlSuccess('formular_create_tags_laden | message: Tags geladen.');
} catch (Exception $e) {
    ErrorLogger::logSqlError('formular_create_init_laden | error: ' . $e->getMessage());
    $listen = $felder = $tags = [];
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = trim($_POST['name']);
    $redirectUrl = trim($_POST['redirect_url']);
    $redirectUrlConfirm = trim($_POST['redirect_url_confirm']);
    $erfolgstext = trim($_POST['success_message']);
    $ausgewaehlteListen = $_POST['listen'] ?? [];
    $ausgewaehlteFelder = $_POST['felder'] ?? [];
    $pflichtfelder = $_POST['required'] ?? [];
    $ausgewaehlteTags = $_POST['tags'] ?? [];

    try {
        if (empty($ausgewaehlteListen)) {
            throw new Exception("Bitte wählen Sie mindestens eine Liste aus.");
        }

        $hauptListe = $ausgewaehlteListen[0];
        $db->beginTransaction();

        // Formular speichern
        $stmt = $db->prepare("INSERT INTO forms (name, success_message, redirect_url, redirect_url_confirm, list_id) VALUES (?, ?, ?, ?, ?)");
        $stmt->execute([$name, $erfolgstext, $redirectUrl, $redirectUrlConfirm, $hauptListe]);
        $formId = $db->lastInsertId();
        ErrorLogger::logSqlSuccess('formular_create_insert_form | message: Formular ' . $formId . ' erstellt.');

        // Listen-Zuweisung speichern
        foreach ($ausgewaehlteListen as $listId) {
            $db->prepare("INSERT INTO form_list (form_id, list_id) VALUES (?, ?)")->execute([$formId, $listId]);
        }

        // Felder speichern
        foreach ($ausgewaehlteFelder as $feldId) {
            $required = in_array($feldId, $pflichtfelder) ? 1 : 0;
            $db->prepare("INSERT INTO form_fields (form_id, field_id, required) VALUES (?, ?, ?)")->execute([$formId, $feldId, $required]);
        }

        // Tags speichern
        foreach ($ausgewaehlteTags as $tagId) {
            $db->prepare("INSERT INTO form_tags (form_id, tag_id) VALUES (?, ?)")->execute([$formId, $tagId]);
        }

        $db->commit();
        $success = "Formular wurde erfolgreich gespeichert.";
    } catch (Exception $e) {
        $db->rollBack();
        ErrorLogger::logSqlError('formular_create_speichern | error: ' . $e->getMessage());
        $error = "Fehler beim Speichern des Formulars.";
    }
}

$pageHelp = renderPageHelp([
    'sections' => [
        [
            'heading' => 'Was macht diese Seite?',
            'items' => [
                'Hier legst du ein neues Anmeldeformular an.',
                'Das Formular kann später eingebettet und einer Liste, Tags und Zusatzfeldern zugeordnet werden.',
            ],
        ],
        [
            'heading' => 'Was muss ich eingeben oder auswählen?',
            'items' => [
                'Vergib einen Namen und wähle die Ziel-Liste für neue Einträge.',
                'Aktiviere nur die Felder und Optionen, die im Formular wirklich benötigt werden.',
            ],
        ],
        [
            'heading' => 'Worauf sollte ich achten?',
            'items' => [
                'Zu viele Pflichtfelder senken oft die Eintragungsrate.',
                'Prüfe vor dem Einsatz, ob Liste, Tags und Formularfelder fachlich zusammenpassen.',
            ],
        ],
    ],
]);

ob_start();
?>

<div class="page-header h2">➕ Formulare &raquo; Neues Formular</div>

<?= $pageHelp ?>

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

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

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

  <div class="mb-3">
    <label for="redirect_url" class="form-label">Weiterleitung nach Einschreibung (optional)</label>
    <input type="url" name="redirect_url" id="redirect_url" class="form-control">
    <small class="form-text text-muted">Wird direkt nach dem Absenden des Formulars aufgerufen (vor DOI).</small>
  </div>

  <div class="mb-3">
    <label for="redirect_url_confirm" class="form-label">Weiterleitung nach Bestätigung (Double Opt-in) (optional)</label>
    <input type="url" name="redirect_url_confirm" id="redirect_url_confirm" class="form-control">
    <small class="form-text text-muted">Wird aufgerufen, wenn der Nutzer den Bestätigungslink aus der Mail klickt.</small>
  </div>

  <div class="mb-3">
    <label for="success_message" class="form-label">Erfolgsmeldung (wird nach Eintrag angezeigt)</label>
    <textarea name="success_message" id="success_message" rows="3" class="form-control"></textarea>
  </div>

  <div class="mb-3">
    <label class="form-label">Zugewiesene Listen</label><br>
    <?php foreach ($listen as $list): ?>
      <div class="form-check form-check-inline">
        <input class="form-check-input" type="checkbox" name="listen[]" value="<?= $list['id'] ?>" id="list<?= $list['id'] ?>">
        <label class="form-check-label" for="list<?= $list['id'] ?>"><?= htmlspecialchars($list['name']) ?></label>
      </div>
    <?php endforeach; ?>
    <div class="form-text">Die erste gewählte Liste wird als Hauptliste gespeichert.</div>
  </div>

  <div class="mb-3">
    <label class="form-label">Felder für dieses Formular</label>
    <?php foreach ($felder as $feld): ?>
      <div class="form-check">
        <input class="form-check-input" type="checkbox" name="felder[]" value="<?= $feld['id'] ?>" id="feld<?= $feld['id'] ?>">
        <label class="form-check-label" for="feld<?= $feld['id'] ?>">
          <?= htmlspecialchars($feld['label']) ?> (<?= htmlspecialchars($feld['field_key']) ?>)
        </label>
        &nbsp;&nbsp;
        <input type="checkbox" name="required[]" value="<?= $feld['id'] ?>"> Pflichtfeld
      </div>
    <?php endforeach; ?>
  </div>

  <div class="mb-3">
    <label for="tags" class="form-label"><i class="ti ti-tag"></i> Tags</label>
    <select name="tags[]" id="tags" class="form-control" multiple>
      <?php foreach ($tags as $tag): ?>
        <option value="<?= $tag['id'] ?>"><?= htmlspecialchars($tag['name']) ?></option>
      <?php endforeach; ?>
    </select>
    <small class="form-text text-muted">Wähle einen oder mehrere Tags für das Formular.</small>
  </div>

  <button type="submit" class="btn btn-primary">Speichern</button>
</form>

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

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