<?php
// admin/empfaenger/felder.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;
}

$title = 'Benutzerdefinierte Felder';
$db = Database::getInstance();

$errors = [];

// Feld löschen
if (isset($_GET['delete'])) {
    $deleteKey = $_GET['delete'];
    try {
        $stmt = $db->prepare('DELETE FROM custom_field_definitions WHERE field_key = ?');
        $stmt->execute([$deleteKey]);
        ErrorLogger::logSqlSuccess('Feld gelöscht | table: custom_field_definitions | context: ' . json_encode(['field_key' => $deleteKey], JSON_UNESCAPED_UNICODE));
        header('Location: felder.php');
        exit;
    } catch (PDOException $e) {
        ErrorLogger::logSqlError('Fehler beim Löschen eines Feldes | table: custom_field_definitions | error: ' . $e->getMessage());
        ErrorLogger::log('Fehler beim Löschen eines Feldes: ' . $e->getMessage());
        $errors[] = 'Fehler beim Löschen.';
    }
}

// Feld bearbeiten (laden)
$editField = null;
if (isset($_GET['edit'])) {
    $editKey = $_GET['edit'];
    try {
        $stmt = $db->prepare('SELECT * FROM custom_field_definitions WHERE field_key = ?');
        $stmt->execute([$editKey]);
        $editField = $stmt->fetch();
        ErrorLogger::logSqlSuccess('Feld zur Bearbeitung geladen | table: custom_field_definitions | context: ' . json_encode(['field_key' => $editKey], JSON_UNESCAPED_UNICODE));
    } catch (PDOException $e) {
        ErrorLogger::logSqlError('Fehler beim Laden eines Feldes | table: custom_field_definitions | error: ' . $e->getMessage());
        ErrorLogger::log('Fehler beim Laden eines Feldes: ' . $e->getMessage(), 'ERROR');
    }
}

// Formular absenden (neu oder bearbeiten)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $field_key = trim($_POST['field_key'] ?? '');
    $label = trim($_POST['label'] ?? '');
    $field_type = $_POST['field_type'] ?? 'text';
    $is_required = isset($_POST['is_required']) ? 1 : 0;
    $is_edit = isset($_POST['is_edit']) && $_POST['is_edit'] === '1';

    if ($field_key === '' || $label === '') {
        $errors[] = 'Feldschlüssel und Bezeichnung dürfen nicht leer sein.';
    }

    if (empty($errors)) {
        try {
            if ($is_edit) {
                $stmt = $db->prepare('UPDATE custom_field_definitions SET label = ?, field_type = ?, is_required = ? WHERE field_key = ?');
                $stmt->execute([$label, $field_type, $is_required, $field_key]);
                ErrorLogger::logSqlSuccess('Feld aktualisiert | table: custom_field_definitions | context: ' . json_encode(['field_key' => $field_key], JSON_UNESCAPED_UNICODE));
            } else {
                $stmt = $db->prepare('INSERT INTO custom_field_definitions (field_key, label, field_type, is_required) VALUES (?, ?, ?, ?)');
                $stmt->execute([$field_key, $label, $field_type, $is_required]);
                ErrorLogger::logSqlSuccess('Feld erstellt | table: custom_field_definitions | context: ' . json_encode(['field_key' => $field_key], JSON_UNESCAPED_UNICODE));
            }
            header('Location: felder.php');
            exit;
        } catch (PDOException $e) {
            ErrorLogger::logSqlError('Fehler beim Speichern eines Feldes | table: custom_field_definitions | error: ' . $e->getMessage());
            ErrorLogger::log('Fehler beim Speichern eines Feldes: ' . $e->getMessage());
            $errors[] = 'Fehler beim Speichern.';
        }
    }
}

try {
    $felder = $db->query('SELECT * FROM custom_field_definitions ORDER BY created_at DESC')->fetchAll();
    ErrorLogger::logSqlSuccess('Feldliste geladen | table: custom_field_definitions | context: ' . json_encode(['order' => 'created_at DESC'], JSON_UNESCAPED_UNICODE));
} catch (PDOException $e) {
    ErrorLogger::logSqlError('Fehler beim Laden der Feldliste | table: custom_field_definitions | error: ' . $e->getMessage());
    ErrorLogger::log('Fehler beim Laden der Feldliste: ' . $e->getMessage(), 'ERROR');
    $felder = [];
}

$pageHelp = renderPageHelp([
    'sections' => [
        [
            'heading' => 'Was macht diese Seite?',
            'items' => [
                'Hier verwaltest du eigene Zusatzfelder für Empfänger und Formulare.',
                'Diese Felder können später in Formularen, Importen und Empfängerdaten genutzt werden.',
            ],
        ],
        [
            'heading' => 'Was muss ich eingeben oder auswählen?',
            'items' => [
                'Vergib einen eindeutigen Feldschlüssel und eine gut verständliche Bezeichnung.',
                'Wähle den passenden Feldtyp und markiere bei Bedarf das Feld als Pflichtfeld.',
            ],
        ],
        [
            'heading' => 'Worauf sollte ich achten?',
            'items' => [
                'Der Feldschlüssel sollte stabil bleiben, weil er technisch weiterverwendet wird.',
                'Beim Löschen eines Feldes verschwindet die Definition aus der Verwaltung.',
            ],
        ],
    ],
    'warning' => 'Löschen nur, wenn das Feld nicht mehr in Formularen, Importen oder laufenden Prozessen benötigt wird.',
]);

ob_start();
?>
<div class="page-header">
  Empfänger &raquo; Benutzerdefinierte Felder
</div>
<?= $pageHelp ?>

<?php if (!empty($errors)): ?>
  <div class="alert alert-danger">
    <ul><?php foreach ($errors as $error): ?><li><?= htmlspecialchars($error) ?></li><?php endforeach; ?></ul>
  </div>
<?php endif; ?>

<form method="post" class="row g-3 mb-4">
  <input type="hidden" name="is_edit" value="<?= $editField ? '1' : '0' ?>">
  <div class="col-md-3">
    <input type="text" name="field_key" class="form-control" placeholder="Feldschlüssel" value="<?= htmlspecialchars($editField['field_key'] ?? '') ?>" <?= $editField ? 'readonly' : '' ?> required>
  </div>
  <div class="col-md-3">
    <input type="text" name="label" class="form-control" placeholder="Bezeichnung" value="<?= htmlspecialchars($editField['label'] ?? '') ?>" required>
  </div>
  <div class="col-md-2">
    <select name="field_type" class="form-select">
      <option value="text" <?= (isset($editField['field_type']) && $editField['field_type'] === 'text') ? 'selected' : '' ?>>Text</option>
      <option value="date" <?= (isset($editField['field_type']) && $editField['field_type'] === 'date') ? 'selected' : '' ?>>Datum</option>
      <option value="number" <?= (isset($editField['field_type']) && $editField['field_type'] === 'number') ? 'selected' : '' ?>>Zahl</option>
      <option value="checkbox" <?= (isset($editField['field_type']) && $editField['field_type'] === 'checkbox') ? 'selected' : '' ?>>Checkbox</option>
      <option value="select" <?= (isset($editField['field_type']) && $editField['field_type'] === 'select') ? 'selected' : '' ?>>Auswahl</option>
    </select>
  </div>
  <div class="col-md-2">
    <div class="form-check mt-2">
      <input class="form-check-input" type="checkbox" name="is_required" value="1" id="is_required" <?= (isset($editField['is_required']) && $editField['is_required']) ? 'checked' : '' ?>>
      <label class="form-check-label" for="is_required">Pflichtfeld</label>
    </div>
  </div>
  <div class="col-md-2">
    <button type="submit" class="btn btn-primary"><?= $editField ? 'Speichern' : 'Feld anlegen' ?></button>
    <?php if ($editField): ?><a href="felder.php" class="btn btn-secondary">Abbrechen</a><?php endif; ?>
  </div>
</form>

<table class="table table-striped">
  <thead>
    <tr>
      <th>Feldschlüssel</th>
      <th>Bezeichnung</th>
      <th>Typ</th>
      <th>Pflicht</th>
      <th>Erstellt am</th>
      <th>Aktion</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($felder as $feld): ?>
      <tr>
        <td><?= htmlspecialchars($feld['field_key']) ?></td>
        <td><?= htmlspecialchars($feld['label']) ?></td>
        <td><?= htmlspecialchars($feld['field_type']) ?></td>
        <td><?= $feld['is_required'] ? 'Ja' : 'Nein' ?></td>
        <td><?= htmlspecialchars($feld['created_at']) ?></td>
        <td>
          <a href="felder.php?edit=<?= urlencode($feld['field_key']) ?>" class="btn btn-sm btn-warning">Bearbeiten</a>
          <a href="felder.php?delete=<?= urlencode($feld['field_key']) ?>" class="btn btn-sm btn-danger" onclick="return confirm('Feld wirklich löschen?')">Löschen</a>
        </td>
      </tr>
    <?php endforeach; ?>
  </tbody>
</table>
<?php
$pageContent = ob_get_clean();
include __DIR__ . '/../template.php';
