<?php
require_once __DIR__ . '/../includes/auth.php';
require_login();

$id = isset($_GET['id']) ? (int) $_GET['id'] : null;
$isEdit = $id !== null;
$pageTitle = ($isEdit ? 'Edit' : 'Add') . ' Blog Post';

$post = [];
if ($isEdit) {
    $stmt = db()->prepare('SELECT * FROM blogs WHERE id = ?');
    $stmt->execute([$id]);
    $post = $stmt->fetch() ?: [];
    if (!$post) { http_response_code(404); die('Post not found.'); }
}

$categories = db()->query('SELECT * FROM blog_categories ORDER BY name')->fetchAll();
$errors = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!csrf_verify()) {
        $errors[] = 'Session expired, please try again.';
    } else {
        $title = trim($_POST['title'] ?? '');
        $slug = trim($_POST['slug'] ?? '') ?: slugify($title);

        $data = [
            'category_id' => (int) ($_POST['category_id'] ?? 0),
            'title' => $title,
            'slug' => slugify($slug),
            'excerpt' => trim($_POST['excerpt'] ?? ''),
            'body' => trim($_POST['body'] ?? ''),
            'author' => trim($_POST['author'] ?? 'Counselling Team'),
            'tags' => trim($_POST['tags'] ?? ''),
            'seo_title' => trim($_POST['seo_title'] ?? ''),
            'seo_description' => trim($_POST['seo_description'] ?? ''),
            'status' => in_array($_POST['status'] ?? '', ['published', 'draft']) ? $_POST['status'] : 'published',
            'published_at' => trim($_POST['published_at'] ?? '') ?: date('Y-m-d'),
        ];
        $data['featured_image'] = handle_image_upload('featured_image', 'blog', $post['featured_image'] ?? null);

        if ($title === '') $errors[] = 'Title is required.';
        if (!$data['category_id']) $errors[] = 'Please select a category.';

        if (!$errors) {
            $oldSlug = $post['slug'] ?? null;
            if ($isEdit) {
                $set = implode(', ', array_map(fn($k) => "$k = :$k", array_keys($data)));
                $stmt = db()->prepare("UPDATE blogs SET $set WHERE id = :id");
                $data['id'] = $id;
                $stmt->execute($data);
            } else {
                $cols = implode(', ', array_keys($data));
                $ph = implode(', ', array_map(fn($k) => ":$k", array_keys($data)));
                $stmt = db()->prepare("INSERT INTO blogs ($cols) VALUES ($ph)");
                $stmt->execute($data);
            }
            write_route_stub('blog-', $data['slug'], 'blog-single.php', $oldSlug);
            flash_set('success', 'Blog post saved.');
            redirect('blogs.php');
        } else {
            $post = array_merge($post, $data);
        }
    }
}

require __DIR__ . '/partials/header.php';
require __DIR__ . '/partials/sidebar.php';
require __DIR__ . '/partials/topbar.php';
?>

<?php if ($errors): ?>
  <div class="mb-6 px-4 py-3 rounded-xl bg-red-50 text-brand-red text-sm font-medium border border-red-200">
    <ul class="list-disc list-inside"><?php foreach ($errors as $err): ?><li><?= e($err) ?></li><?php endforeach; ?></ul>
  </div>
<?php endif; ?>

<form method="post" enctype="multipart/form-data" class="space-y-6 max-w-4xl">
  <?= csrf_field() ?>

  <div class="bg-white rounded-2xl shadow-sm p-6">
    <div class="grid md:grid-cols-2 gap-5">
      <div class="md:col-span-2"><label class="block text-sm font-medium mb-1.5">Title <span class="text-brand-red">*</span></label>
        <input type="text" name="title" value="<?= e($post['title'] ?? '') ?>" required class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"></div>
      <div><label class="block text-sm font-medium mb-1.5">Slug (leave blank to auto-generate)</label>
        <input type="text" name="slug" value="<?= e($post['slug'] ?? '') ?>" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green">
        <p class="text-xs text-gray-400 mt-1">Public URL: blog-<?= e($post['slug'] ?? '{slug}') ?>.php</p></div>
      <div><label class="block text-sm font-medium mb-1.5">Category</label>
        <select name="category_id" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green">
          <?php foreach ($categories as $c): ?>
            <option value="<?= (int) $c['id'] ?>" <?= (string) ($post['category_id'] ?? '') === (string) $c['id'] ? 'selected' : '' ?>><?= e($c['name']) ?></option>
          <?php endforeach; ?>
        </select></div>
      <div class="md:col-span-2"><label class="block text-sm font-medium mb-1.5">Excerpt (short summary shown on the blog listing)</label>
        <textarea name="excerpt" rows="2" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"><?= e($post['excerpt'] ?? '') ?></textarea></div>
      <div class="md:col-span-2"><label class="block text-sm font-medium mb-1.5">Body</label>
        <textarea id="body-editor" name="body" rows="12" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"><?= e($post['body'] ?? '') ?></textarea></div>
      <div>
        <label class="block text-sm font-medium mb-1.5">Featured Image</label>
        <?php if (!empty($post['featured_image'])): ?><img src="<?= e(resolve_image($post['featured_image'])) ?>" class="h-20 rounded-lg mb-2 border"><?php endif; ?>
        <input type="file" name="featured_image" accept="image/*" class="w-full text-sm">
      </div>
      <div><label class="block text-sm font-medium mb-1.5">Author</label>
        <input type="text" name="author" value="<?= e($post['author'] ?? 'Counselling Team') ?>" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"></div>
      <div><label class="block text-sm font-medium mb-1.5">Tags (comma separated)</label>
        <input type="text" name="tags" value="<?= e($post['tags'] ?? '') ?>" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"></div>
      <div><label class="block text-sm font-medium mb-1.5">Published Date</label>
        <input type="date" name="published_at" value="<?= e($post['published_at'] ?? date('Y-m-d')) ?>" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"></div>
      <div><label class="block text-sm font-medium mb-1.5">Status</label>
        <select name="status" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green">
          <option value="published" <?= ($post['status'] ?? 'published') === 'published' ? 'selected' : '' ?>>Published</option>
          <option value="draft" <?= ($post['status'] ?? '') === 'draft' ? 'selected' : '' ?>>Draft</option>
        </select></div>
    </div>
  </div>

  <div class="bg-white rounded-2xl shadow-sm p-6">
    <h2 class="font-heading font-bold text-lg mb-5"><i class="fa-solid fa-magnifying-glass text-brand-gold mr-2"></i>Page SEO</h2>
    <div class="grid gap-5">
      <div><label class="block text-sm font-medium mb-1.5">SEO Title</label>
        <input type="text" name="seo_title" value="<?= e($post['seo_title'] ?? '') ?>" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"></div>
      <div><label class="block text-sm font-medium mb-1.5">SEO Description</label>
        <textarea name="seo_description" rows="2" class="w-full rounded-xl border border-gray-300 px-4 py-2.5 text-sm focus:outline-none focus:ring-2 focus:ring-brand-green"><?= e($post['seo_description'] ?? '') ?></textarea></div>
    </div>
  </div>

  <div class="flex items-center gap-3">
    <button type="submit" class="bg-gradient-to-r from-brand-red to-brand-green text-white font-semibold px-8 py-3 rounded-xl hover:brightness-110 transition">
      <i class="fa-solid fa-floppy-disk mr-2"></i>Save Post
    </button>
    <a href="blogs.php" class="text-gray-500 text-sm font-medium hover:text-gray-700">Cancel</a>
  </div>
</form>

<script src="https://cdn.ckeditor.com/ckeditor5/41.4.2/classic/ckeditor.js"></script>
<script>
  ClassicEditor.create(document.querySelector('#body-editor'), {
    toolbar: ['heading', '|', 'bold', 'italic', 'link', 'bulletedList', 'numberedList', '|', 'blockQuote', 'undo', 'redo']
  }).catch(err => console.error(err));
</script>

<?php require __DIR__ . '/partials/footer.php'; ?>
