<?php
/**
 * Verwaltung von Tags inkl. optionalem Verfalldatum
 * -------------------------------------------------
 * 
 * ▸ Vollständiges Error‑Handling per try/catch
 * ▸ Sämtliche SQL‑Operationen werden mit ErrorLogger::logSqlSuccess() bzw. logSqlError() protokolliert – es wird
 *   IMMER das reine SQL‑Statement (String) übergeben, nie ein PDOStatement‑Objekt.
 * ▸ Änderungs‑Tracking via logSettingChange()
 * ▸ Bootstrap‑Alerts mit Auto‑Dismiss
 * ▸ TML‑Icons (Tabler Icons) für UI‑Feedback
 */

session_start();

require_once __DIR__ . '/../../includes/init.php';
require_once __DIR__ . '/../../auth/AuthController.php';
require_once __DIR__ . '/../../includes/core/TagRepository.php';

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

$userId = $_SESSION['user_id'] ?? 0;

// -----------------------------------------------------------------------------
// 2) Seitentitel & Grundkonfig
// -----------------------------------------------------------------------------
$config  = include __DIR__ . '/../../includes/config.php';
$baseUrl = rtrim($config['app']['base_url'], '/');
$title   = 'Tags verwalten';

$repo   = new TagRepository();
$errors = [];
$info   = '';

// -----------------------------------------------------------------------------
// 3) Tag anlegen (POST)
// -----------------------------------------------------------------------------
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name           = trim($_POST['name'] ?? '');
    $expirationDate = $_POST['expiration_date'] ?: null; // leeres Feld → NULL

    if ($name === '') {
        $errors[] = 'Der Tag‑Name darf nicht leer sein.';
    } else {
        try {
            $ok = $repo->create($name, $expirationDate, $userId);

            if ($ok) {
                $info = 'Tag wurde angelegt.';
            } else {
                $errors[] = 'Konnte Tag nicht speichern.';
            }
        } catch (Throwable $e) {
            ErrorLogger::logSqlError('tags.php | create tag failed | error: ' . $e->getMessage());
            $errors[] = 'Fehler beim Speichern.';
        }
    }
}

// -----------------------------------------------------------------------------
// 4) Tag löschen (GET ?delete=ID)
// -----------------------------------------------------------------------------
if (isset($_GET['delete'])) {
    $deleteId = (int) $_GET['delete'];

    try {
        $stmt = Database::getInstance()->prepare('DELETE FROM tags WHERE id = :id');
        $stmt->bindValue(':id', $deleteId, PDO::PARAM_INT);

        $ok = $stmt->execute();

        if ($ok) {
            // ◀︎ Statement‑String loggen, nicht das Objekt!
            ErrorLogger::logSqlSuccess($stmt->queryString);
            logSettingChange($userId, 'delete', 'tag', json_encode(['id' => $deleteId]));
            $info = 'Tag wurde gelöscht.';
        } else {
            ErrorLogger::logSqlError($stmt->queryString);
            $errors[] = 'Tag konnte nicht gelöscht werden.';
        }
    } catch (Throwable $e) {
        ErrorLogger::logSqlError('tags.php | delete tag failed | error: ' . $e->getMessage());
        $errors[] = 'Fehler beim Löschen.';
    }
}

// -----------------------------------------------------------------------------
// 5) Alle Tags laden (inkl. abgelaufene)
// -----------------------------------------------------------------------------
try {
    $tags = $repo->all(false); // false → auch abgelaufene anzeigen
} catch (Throwable $e) {
    ErrorLogger::logSqlError('tags.php | load tags failed | error: ' . $e->getMessage());
    $tags   = [];
    $errors[] = 'Fehler beim Laden der Tags.';
}

$fieldTooltips = [
    '[name="name"]' => 'Interner Tag-Name für Segmentierung und Kennzeichnung.',
    '[name="expiration_date"]' => 'Optionales Datum, ab dem der Tag als abgelaufen gilt.',
];

// -----------------------------------------------------------------------------
// 6) HTML‐Ausgabe
// -----------------------------------------------------------------------------
ob_start();
?>
<div class="page-header h2 mb-4">
    <i class="ti ti-tag"></i> Admin &raquo; Tags verwalten
</div>

<?php if ($info): ?>
    <div class="alert alert-success alert-dismissible fade show auto-dismiss" role="alert" data-auto-dismiss="3000">
        <i class="ti ti-circle-check me-1"></i> <?= htmlspecialchars($info) ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    </div>
<?php endif; ?>

<?php if ($errors): ?>
    <div class="alert alert-danger alert-dismissible fade show auto-dismiss" role="alert" data-auto-dismiss="7000">
        <i class="ti ti-alert-triangle me-1"></i>
        <ul class="mb-0">
            <?php foreach ($errors as $e): ?>
                <li><?= htmlspecialchars($e) ?></li>
            <?php endforeach; ?>
        </ul>
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    </div>
<?php endif; ?>

<!-- Neuer Tag -->
<form method="post" class="mb-4">
    <div class="row g-3 align-items-end">
        <!-- Name -->
        <div class="col-md-5">
            <label for="name" class="form-label"><i class="ti ti-tag"></i> Tag‑Name</label>
            <input type="text" name="name" id="name" class="form-control" placeholder="z. B. Kunde‑VIP" required>
        </div>

        <!-- Verfalldatum -->
        <div class="col-md-3">
            <label for="expiration_date" class="form-label"><i class="ti ti-calendar-x"></i> Verfalldatum</label>
            <input type="date" name="expiration_date" id="expiration_date" class="form-control">
            <div class="form-text">Leer lassen = unbegrenzt</div>
        </div>

        <!-- Action -->
        <div class="col-auto">
            <button type="submit" class="btn btn-primary">
                <i class="ti ti-plus"></i> Tag hinzufügen
            </button>
        </div>
    </div>
</form>

<!-- Tag‑Liste -->
<h5 class="mb-3"><i class="ti ti-list-check"></i> Vorhandene Tags</h5>

<div class="table-responsive">
    <table class="table table-striped align-middle">
        <thead class="table-light">
        <tr>
            <th>Name</th>
            <th style="width: 160px;">Verfalls&shy;datum</th>
            <th style="width: 140px;" class="text-end">Aktionen</th>
        </tr>
        </thead>
        <tbody>
        <?php foreach ($tags as $tag): ?>
            <?php $isExpired = $tag['expiration_date'] && $tag['expiration_date'] < date('Y-m-d'); ?>
            <tr class="<?= $isExpired ? 'table-warning' : ''; ?>">
                <!-- Name + Icon wenn abgelaufen -->
                <td>
                    <?= htmlspecialchars($tag['name']); ?>
                    <?php if ($isExpired): ?>
                        <i class="ti ti-alert-triangle text-danger ms-1"
                           title="Abgelaufen am <?= date('d.m.Y', strtotime($tag['expiration_date'])); ?>"></i>
                    <?php endif; ?>
                </td>

                <!-- Expiration -->
                <td>
                    <?= $tag['expiration_date']
                        ? date('d.m.Y', strtotime($tag['expiration_date']))
                        : '<span class="text-muted fst-italic">kein Limit</span>'; ?>
                </td>

                <!-- Actions -->
                <td class="text-end">
                    <a href="?delete=<?= $tag['id']; ?>"
                       class="btn btn-sm btn-outline-danger"
                       onclick="return confirm('Tag wirklich löschen?');"
                       title="Löschen">
                        <i class="ti ti-trash"></i>
                    </a>
                </td>
            </tr>
        <?php endforeach; ?>
        </tbody>
    </table>
</div>

<!-- Auto‑Dismiss -->
<script>
// schließt Alerts automatisch
(function () {
    document.querySelectorAll('.alert.auto-dismiss').forEach(alert => {
        const ms = +alert.dataset.autoDismiss || 5000;
        setTimeout(() => {
            bootstrap.Alert.getOrCreateInstance(alert).close();
        }, ms);
    });
})();
</script>
<?php
$pageContent = ob_get_clean();
include __DIR__ . '/../template.php';
