<?php
declare(strict_types=1);

require_once __DIR__ . '/../functions.php';
require_admin();

$sections = ['content', 'hero', 'stories', 'portfolio', 'services', 'albums', 'testimonials', 'reels', 'recognition', 'about', 'package', 'leads'];
$section = (string) ($_GET['section'] ?? 'content');
if (!in_array($section, $sections, true)) {
    $section = 'content';
}

$data = site_data();
$message = null;
$messageType = 'success';

function admin_redirect(string $section): never
{
    header('Location: /admin/content.php?section=' . rawurlencode($section));
    exit;
}

function posted_string(string $key, string $fallback = ''): string
{
    return trim((string) ($_POST[$key] ?? $fallback));
}

function posted_bool(string $key): int
{
    return isset($_POST[$key]) ? 1 : 0;
}

function item_index(array $items): ?int
{
    if (!isset($_POST['index']) || !is_numeric($_POST['index'])) {
        return null;
    }
    $index = (int) $_POST['index'];
    return array_key_exists($index, $items) ? $index : null;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!verify_csrf($_POST['csrf'] ?? null)) {
        $message = 'Your session expired. Please try again.';
        $messageType = 'error';
    } else {
        $action = posted_string('action');
        if ($section === 'hero') {
            $items = array_values((array) ($data['hero_slides'] ?? default_hero_slides()));
            $index = item_index($items);
            if ($action === 'delete' && $index !== null) {
                array_splice($items, $index, 1);
                collection_save('hero_slides', $items);
                $message = 'Hero slide deleted.';
            } elseif ($action === 'save') {
                $item = [
                    'title' => posted_string('title', 'Hero slide'),
                    'desktop' => posted_string('desktop'),
                    'tablet' => posted_string('tablet'),
                    'mobile' => posted_string('mobile'),
                    'active' => posted_bool('active'),
                ];
                foreach (['desktop', 'tablet', 'mobile'] as $device) {
                    if ($image = upload_media($device . '_upload')) $item[$device] = $image;
                }
                $item['tablet'] = $item['tablet'] ?: $item['desktop'];
                $item['mobile'] = $item['mobile'] ?: $item['tablet'];
                if ($item['desktop'] === '') {
                    $message = 'Choose or upload a desktop hero image.';
                    $messageType = 'error';
                } elseif ($index === null) {
                    $items[] = $item;
                    collection_save('hero_slides', $items);
                    $message = 'Hero slide added.';
                } else {
                    $items[$index] = array_merge($items[$index], $item);
                    collection_save('hero_slides', $items);
                    $message = 'Hero slide updated.';
                }
            }
        } elseif ($section === 'content') {
            $data['settings']['site_name'] = posted_string('site_name', $data['settings']['site_name']);
            $data['settings']['tagline'] = posted_string('tagline', $data['settings']['tagline']);
            $data['settings']['location'] = posted_string('location', $data['settings']['location']);
            $data['settings']['email'] = posted_string('email', $data['settings']['email']);
            $data['settings']['smtp_host'] = posted_string('smtp_host', $data['settings']['smtp_host'] ?? '');
            $data['settings']['smtp_port'] = posted_string('smtp_port', $data['settings']['smtp_port'] ?? '587');
            $data['settings']['smtp_encryption'] = posted_string('smtp_encryption', $data['settings']['smtp_encryption'] ?? 'tls');
            $data['settings']['smtp_username'] = posted_string('smtp_username', $data['settings']['smtp_username'] ?? '');
            $data['settings']['smtp_password'] = posted_string('smtp_password', $data['settings']['smtp_password'] ?? '');
            $data['settings']['mailer_from_name'] = posted_string('mailer_from_name', $data['settings']['mailer_from_name'] ?? $data['settings']['site_name']);
            $data['settings']['mailer_from_email'] = posted_string('mailer_from_email', $data['settings']['mailer_from_email'] ?? $data['settings']['email']);
            $data['settings']['phone'] = posted_string('phone', $data['settings']['phone']);
            $data['settings']['whatsapp'] = preg_replace('/\D+/', '', posted_string('whatsapp')) ?? '';
            $data['settings']['whatsapp_message'] = posted_string('whatsapp_message', $data['settings']['whatsapp_message']);
            $data['settings']['footer'] = posted_string('footer', $data['settings']['footer']);
            $data['settings']['copyright'] = posted_string('copyright', $data['settings']['copyright']);
            $data['settings']['primary_color'] = posted_string('primary_color', '#163D2E');
            $data['settings']['accent_color'] = posted_string('accent_color', '#C89442');
            $headerLogo = posted_string('header_logo', $data['settings']['header_logo'] ?? $data['settings']['logo'] ?? 'images/logo.png');
            $footerLogo = posted_string('footer_logo', $data['settings']['footer_logo'] ?? $data['settings']['logo'] ?? 'images/logo.png');
            $data['settings']['header_logo'] = $headerLogo;
            $data['settings']['footer_logo'] = $footerLogo;
            $data['settings']['logo'] = $headerLogo;
            $data['settings']['favicon'] = posted_string('favicon', $data['settings']['favicon'] ?? 'images/logo.png');
            $data['settings']['og_image'] = posted_string('og_image', $data['settings']['og_image'] ?? $data['hero']['image']);
            $data['settings']['seo_title'] = posted_string('seo_title', $data['settings']['seo_title']);
            $data['settings']['seo_description'] = posted_string('seo_description', $data['settings']['seo_description']);
            $data['settings']['robots'] = posted_string('robots', 'index,follow');
            foreach (['instagram', 'facebook', 'youtube', 'pinterest', 'linkedin', 'x_twitter', 'business_name'] as $setting) {
                $data['settings'][$setting] = posted_string($setting, $data['settings'][$setting] ?? '');
            }
            $data['cta_card']['title'] = posted_string('cta_title', $data['cta_card']['title'] ?? '');
            $data['cta_card']['text'] = posted_string('cta_text', $data['cta_card']['text'] ?? '');
            $data['cta_card']['label'] = posted_string('cta_label', $data['cta_card']['label'] ?? '');
            $data['cta_card']['url'] = posted_string('cta_url', $data['cta_card']['url'] ?? '/contact');
            $data['cta_card']['image'] = posted_string('cta_image', $data['cta_card']['image'] ?? 'images/couple-editorial.jpeg');
            if ($ctaImage = upload_media('cta_image_upload')) $data['cta_card']['image'] = $ctaImage;

            $data['hero']['eyebrow'] = posted_string('hero_eyebrow', $data['hero']['eyebrow']);
            $data['hero']['heading'] = posted_string('hero_heading', $data['hero']['heading']);
            $data['hero']['description'] = posted_string('hero_description', $data['hero']['description']);
            $data['hero']['primary_label'] = posted_string('primary_label', $data['hero']['primary_label']);
            $data['hero']['primary_url'] = posted_string('primary_url', $data['hero']['primary_url']);
            $data['hero']['secondary_label'] = posted_string('secondary_label', $data['hero']['secondary_label']);
            $data['hero']['video_url'] = posted_string('video_url', $data['hero']['video_url']);
            $data['hero']['quote'] = posted_string('hero_quote', $data['hero']['quote']);
            $data['hero']['decorative_text'] = [
                posted_string('decorative_one', $data['hero']['decorative_text'][0] ?? ''),
                posted_string('decorative_two', $data['hero']['decorative_text'][1] ?? ''),
                posted_string('decorative_three', $data['hero']['decorative_text'][2] ?? ''),
            ];
            if ($image = upload_media('hero_image_upload')) {
                $data['hero']['image'] = $image;
            } elseif (posted_string('hero_image')) {
                $data['hero']['image'] = posted_string('hero_image');
            }

            if ($headerLogoUpload = upload_media('header_logo_upload')) $data['settings']['header_logo'] = $headerLogoUpload;
            if ($footerLogoUpload = upload_media('footer_logo_upload')) $data['settings']['footer_logo'] = $footerLogoUpload;
            $data['settings']['logo'] = $data['settings']['header_logo'];

            if ($favicon = upload_media('favicon_upload')) {
                $data['settings']['favicon'] = $favicon;
            } elseif (posted_string('favicon')) {
                $data['settings']['favicon'] = posted_string('favicon');
            }

            if ($ogImage = upload_media('og_image_upload')) {
                $data['settings']['og_image'] = $ogImage;
            } elseif (posted_string('og_image')) {
                $data['settings']['og_image'] = posted_string('og_image');
            }

            foreach (['stats', 'memories', 'testimonials', 'social'] as $collection) {
                if (isset($_POST[$collection]) && is_string($_POST[$collection])) {
                    $decoded = json_decode($_POST[$collection], true);
                    if (is_array($decoded)) {
                        $data[$collection] = $decoded;
                    }
                }
            }
            save_site_data($data);
            if ($action === 'test-mail') {
                $sent = send_lead_email('contact', ['name' => 'SMTP test', 'email' => $data['settings']['email'], 'message' => 'This is a test email from the TRUE VALUE PHOTOGRAPHY admin panel.']);
                $message = $sent ? 'Test email sent successfully.' : 'Test email could not be sent. Check the SMTP error log.';
                $messageType = $sent ? 'success' : 'error';
            } else {
                $message = 'Website content and SEO settings saved.';
            }
        } elseif ($section === 'stories') {
            $items = array_values((array) ($data['stories'] ?? []));
            $index = item_index($items);
            if ($action === 'delete' && $index !== null) {
                array_splice($items, $index, 1);
                collection_save('stories', $items);
                $message = 'Wedding story image deleted.';
            } elseif ($action === 'bulk-upload') {
                $uploadedImages = upload_media_many('story_images_upload');
                foreach ($uploadedImages as $image) {
                    $title = pathinfo($image, PATHINFO_FILENAME);
                    $items[] = ['title' => $title, 'image' => $image];
                }
                if ($uploadedImages) {
                    collection_save('stories', $items);
                    $message = count($uploadedImages) . ' Wedding Stories image(s) added.';
                } else {
                    $message = 'No valid Wedding Stories images were uploaded.';
                    $messageType = 'error';
                }
            } elseif ($action === 'save') {
                $item = ['title' => posted_string('title', 'Wedding story'), 'image' => posted_string('image')];
                if ($image = upload_media('image_upload')) $item['image'] = $image;
                if ($item['image'] === '') {
                    $message = 'Choose or upload a story image.';
                    $messageType = 'error';
                } elseif ($index === null) {
                    $items[] = $item;
                    collection_save('stories', $items);
                    $message = 'Wedding story image added.';
                } else {
                    $items[$index] = array_merge($items[$index], $item);
                    collection_save('stories', $items);
                    $message = 'Wedding story image updated.';
                }
            }
        } elseif ($section === 'portfolio' && $action === 'save-portfolio-hero') {
            $portfolioHero = is_array($data['portfolio_hero'] ?? null) ? $data['portfolio_hero'] : ['image' => 'images/hero-wedding.jpeg'];
            $portfolioHero['image'] = posted_string('portfolio_hero_image', (string) ($portfolioHero['image'] ?? 'images/hero-wedding.jpeg'));
            if ($image = upload_media('portfolio_hero_upload')) $portfolioHero['image'] = $image;
            $data['portfolio_hero'] = $portfolioHero;
            save_site_data($data);
            $message = 'Portfolio hero image saved.';
        } elseif ($section === 'portfolio' && !in_array($action, ['save-category', 'delete-category', 'bulk-category', 'bulk-delete', 'bulk-upload'], true)) {
            $items = $data['portfolio'];
            $index = item_index($items);
            if ($action === 'delete' && $index !== null) {
                array_splice($items, $index, 1);
                collection_save('portfolio', $items);
                $message = 'Portfolio story deleted.';
            } elseif ($action === 'save') {
                $item = [
                    'title' => posted_string('title'),
                    'slug' => slugify(posted_string('slug', posted_string('title'))),
                    'category' => posted_string('category', 'Weddings'),
                    'location' => posted_string('location'),
                    'event_date' => posted_string('event_date'),
                    'description' => posted_string('description'),
                    'show_text' => posted_bool('show_text'),
                    'status' => posted_string('status', 'published') === 'draft' ? 'draft' : 'published',
                    'image' => posted_string('image', 'images/hero-wedding.jpeg'),
                ];
                if ($image = upload_media('image_upload')) {
                    $item['image'] = $image;
                }
                if ($index === null) {
                    $items[] = $item;
                    $message = 'Portfolio story added.';
                } else {
                    $items[$index] = array_merge($items[$index], $item);
                    $message = 'Portfolio story updated.';
                }
                collection_save('portfolio', $items);
            }
        } elseif ($section === 'services') {
            $items = $data['services'];
            $index = item_index($items);
            if ($action === 'delete' && $index !== null) {
                array_splice($items, $index, 1);
                collection_save('services', $items);
                $message = 'Service deleted.';
            } elseif ($action === 'save') {
                $item = [
                    'title' => posted_string('title'),
                    'number' => posted_string('number', sprintf('%02d', count($items) + 1)),
                    'description' => posted_string('description'),
                    'features' => array_values(array_filter(array_map('trim', explode("\n", posted_string('features'))))),
                    'price' => posted_string('price'),
                    'image' => posted_string('image', 'images/hero-wedding.jpeg'),
                    'active' => posted_bool('active'),
                ];
                if ($image = upload_media('image_upload')) {
                    $item['image'] = $image;
                }
                if ($index === null) {
                    $items[] = $item;
                    $message = 'Service added.';
                } else {
                    $items[$index] = array_merge($items[$index], $item);
                    $message = 'Service updated.';
                }
                collection_save('services', $items);
            }
        } elseif (in_array($section, ['testimonials', 'reels', 'recognition'], true)) {
            $collectionKey = $section;
            $items = array_values((array) ($data[$collectionKey] ?? []));
            $index = item_index($items);
            if ($action === 'delete' && $index !== null) {
                array_splice($items, $index, 1);
                collection_save($collectionKey, $items);
                $message = ucfirst($section) . ' item deleted.';
            } elseif ($action === 'save') {
                if ($section === 'testimonials') {
                    $item = [
                        'name' => posted_string('name'),
                        'quote' => posted_string('quote'),
                        'meta' => posted_string('meta'),
                        'rating' => max(1, min(5, (int) posted_string('rating', '5'))),
                        'image' => posted_string('image'),
                    ];
                    if ($image = upload_media('image_upload')) $item['image'] = $image;
                    $required = $item['name'] !== '' && $item['quote'] !== '';
                } elseif ($section === 'reels') {
                    $uploadedVideo = upload_video('video_upload');
                    $item = [
                        'title' => posted_string('title'),
                        'caption' => posted_string('caption', posted_string('title')),
                        'category' => posted_string('category', 'Weddings'),
                        'image' => posted_string('image'),
                        'video_url' => posted_string('video_url'),
                        'instagram_url' => posted_string('instagram_url'),
                    ];
                    if ($image = upload_media('image_upload')) $item['image'] = $image;
                    if ($uploadedVideo) $item['video_url'] = $uploadedVideo;
                    if ($item['image'] === '' && $uploadedVideo) $item['image'] = video_thumbnail($uploadedVideo) ?: 'images/hero-wedding.jpeg';
                    if ($item['image'] === '') $item['image'] = 'images/hero-wedding.jpeg';
                    $required = $item['title'] !== '';
                } else {
                    $item = [
                        'title' => posted_string('title'),
                        'detail' => posted_string('detail'),
                        'icon' => posted_string('icon', 'award'),
                    ];
                    $required = $item['title'] !== '';
                }
                if (!$required) {
                    $message = 'Complete the required fields.';
                    $messageType = 'error';
                } elseif ($index === null) {
                    $items[] = $item;
                    collection_save($collectionKey, $items);
                    $message = ucfirst($section) . ' item added.';
                } else {
                    $items[$index] = array_merge($items[$index], $item);
                    collection_save($collectionKey, $items);
                    $message = ucfirst($section) . ' item updated.';
                }
            }
        } elseif ($section === 'about') {
            $about = is_array($data['about'] ?? null) ? $data['about'] : default_about_content();
            $about['heading'] = posted_string('heading', $about['heading']);
            $about['intro'] = posted_string('intro', $about['intro']);
            $about['story'] = posted_string('story', $about['story']);
            $about['cta_title'] = posted_string('cta_title', $about['cta_title']);
            $about['cta_text'] = posted_string('cta_text', $about['cta_text']);
            $about['image'] = posted_string('image', $about['image']);
            $about['secondary_images'] = array_values(array_filter(array_map('trim', (array) ($_POST['secondary_images'] ?? []))));
            $founder = is_array($about['founder_story'] ?? null) ? $about['founder_story'] : default_founder_story();
            foreach (['eyebrow', 'heading', 'intro', 'name', 'role', 'instagram', 'youtube'] as $field) {
                $founder[$field] = posted_string('founder_' . $field, (string) ($founder[$field] ?? ''));
            }
            $founder['image'] = posted_string('founder_image', (string) ($founder['image'] ?? 'images/couple-garden.jpeg'));
            if ($image = upload_media('founder_image_upload')) $founder['image'] = $image;
            $founder['faqs'] = [];
            $faqQuestions = (array) ($_POST['founder_faq_question'] ?? []);
            $faqAnswers = (array) ($_POST['founder_faq_answer'] ?? []);
            foreach ($faqQuestions as $faqIndex => $postedQuestion) {
                $question = trim((string) $postedQuestion);
                $answer = trim((string) ($faqAnswers[$faqIndex] ?? ''));
                if ($question !== '') $founder['faqs'][] = ['question' => $question, 'answer' => $answer];
            }
            $about['founder_story'] = $founder;
            if ($image = upload_media('image_upload')) $about['image'] = $image;
            foreach (['secondary_image_one', 'secondary_image_two'] as $field) {
                if ($image = upload_media($field)) $about['secondary_images'][] = $image;
            }
            $data['about'] = $about;
            save_site_data($data);
            $message = 'About page content saved.';
        } elseif ($section === 'portfolio' && in_array($action, ['save-category', 'delete-category', 'bulk-category', 'bulk-delete', 'bulk-upload'], true)) {
            $categories = array_values(array_unique(array_filter(array_map('trim', (array) ($data['portfolio_categories'] ?? [])))));
            if ($action === 'save-category') {
                $category = posted_string('category_name');
                if ($category === '' || in_array($category, $categories, true)) {
                    $message = 'Enter a unique portfolio category name.';
                    $messageType = 'error';
                } else {
                    $categories[] = $category;
                    $data['portfolio_categories'] = $categories;
                    save_site_data($data);
                    $message = 'Portfolio category created.';
                }
            } elseif ($action === 'delete-category') {
                $category = posted_string('category_name');
                if (count($categories) <= 1 || !in_array($category, $categories, true)) {
                    $message = 'Keep at least one portfolio category.';
                    $messageType = 'error';
                } else {
                    $data['portfolio_categories'] = array_values(array_diff($categories, [$category]));
                    foreach ($data['portfolio'] as &$portfolioItem) {
                        if (($portfolioItem['category'] ?? '') === $category) $portfolioItem['category'] = $data['portfolio_categories'][0];
                    }
                    unset($portfolioItem);
                    save_site_data($data);
                    $message = 'Portfolio category removed.';
                }
            } elseif ($action === 'bulk-upload') {
                $category = posted_string('category_name', $categories[0] ?? 'Weddings');
                $files = $_FILES['portfolio_uploads'] ?? [];
                $uploaded = 0;
                foreach ((array) ($files['name'] ?? []) as $fileIndex => $originalName) {
                    $_FILES['portfolio_single'] = [
                        'name' => $files['name'][$fileIndex] ?? '',
                        'type' => $files['type'][$fileIndex] ?? '',
                        'tmp_name' => $files['tmp_name'][$fileIndex] ?? '',
                        'error' => $files['error'][$fileIndex] ?? UPLOAD_ERR_NO_FILE,
                        'size' => $files['size'][$fileIndex] ?? 0,
                    ];
                    if ($image = upload_media('portfolio_single')) {
                        $title = pathinfo((string) $originalName, PATHINFO_FILENAME);
                        $data['portfolio'][] = ['title' => $title, 'slug' => slugify($title) . '-' . bin2hex(random_bytes(3)), 'category' => $category, 'location' => '', 'description' => '', 'image' => $image, 'show_text' => 1, 'status' => 'published'];
                        $uploaded++;
                    }
                }
                unset($_FILES['portfolio_single']);
                if ($uploaded) {
                    collection_save('portfolio', $data['portfolio']);
                    $message = $uploaded . ' portfolio image(s) uploaded.';
                } else {
                    $message = 'No valid portfolio images were uploaded.';
                    $messageType = 'error';
                }
            } elseif ($action === 'bulk-delete') {
                $selected = array_values(array_unique(array_filter(array_map('intval', (array) ($_POST['portfolio_indexes'] ?? [])), static fn (int $value): bool => $value >= 0)));
                if (!$selected) {
                    $message = 'Select at least one portfolio image to delete.';
                    $messageType = 'error';
                } else {
                    $data['portfolio'] = array_values(array_filter($data['portfolio'], static function (array $portfolioItem, int $portfolioIndex) use ($selected): bool {
                        return !in_array($portfolioIndex, $selected, true);
                    }, ARRAY_FILTER_USE_BOTH));
                    collection_save('portfolio', $data['portfolio']);
                    $message = count($selected) . ' portfolio image(s) deleted.';
                }
            } else {
                $selected = array_values(array_filter(array_map('intval', (array) ($_POST['portfolio_indexes'] ?? [])), static fn (int $value): bool => $value >= 0));
                $category = posted_string('category_name');
                if ($category === '' || !in_array($category, $categories, true) || !$selected) {
                    $message = 'Select images and a valid category.';
                    $messageType = 'error';
                } else {
                    foreach ($selected as $selectedIndex) {
                        if (isset($data['portfolio'][$selectedIndex])) $data['portfolio'][$selectedIndex]['category'] = $category;
                    }
                    collection_save('portfolio', $data['portfolio']);
                    $message = count($selected) . ' portfolio item(s) assigned to ' . $category . '.';
                }
            }
        } elseif ($section === 'gallery') {
            $items = $data['gallery'] ?? [];
            $index = item_index($items);
            $categories = gallery_categories($data);
            if ($action === 'save-category') {
                $category = posted_string('category_name');
                if ($category === '') {
                    $message = 'Add a category name.';
                    $messageType = 'error';
                } elseif (in_array($category, $categories, true)) {
                    $message = 'That category already exists.';
                    $messageType = 'error';
                } else {
                    $data['gallery_categories'] = array_values(array_unique(array_merge($categories, [$category])));
                    save_site_data($data);
                    $message = 'Gallery category created.';
                }
            } elseif ($action === 'delete-category') {
                $category = posted_string('category_name');
                if (count($categories) <= 1) {
                    $message = 'Keep at least one gallery category.';
                    $messageType = 'error';
                } else {
                    $data['gallery_categories'] = array_values(array_diff($categories, [$category]));
                    foreach ($items as &$galleryItem) {
                        if (($galleryItem['category'] ?? '') === $category) {
                            $galleryItem['category'] = 'Weddings';
                        }
                    }
                    unset($galleryItem);
                    $data['gallery'] = $items;
                    save_site_data($data);
                    $message = 'Gallery category removed.';
                }
            } elseif ($action === 'bulk-delete') {
                $selected = array_values(array_filter(array_map('intval', (array) ($_POST['image_indexes'] ?? [])), static fn (int $value): bool => $value >= 0));
                foreach ($selected as $selectedIndex) {
                    if (array_key_exists($selectedIndex, $items)) {
                        unset($items[$selectedIndex]);
                    }
                }
                collection_save('gallery', array_values($items));
                $message = $selected ? count($selected) . ' gallery image(s) removed.' : 'Select at least one image.';
                if (!$selected) $messageType = 'error';
            } elseif ($action === 'bulk-upload') {
                $category = posted_string('category', 'Weddings');
                $uploaded = 0;
                $files = $_FILES['gallery_uploads'] ?? [];
                foreach ((array) ($files['name'] ?? []) as $fileIndex => $unused) {
                    $_FILES['gallery_single'] = [
                        'name' => $files['name'][$fileIndex] ?? '', 'type' => $files['type'][$fileIndex] ?? '',
                        'tmp_name' => $files['tmp_name'][$fileIndex] ?? '', 'error' => $files['error'][$fileIndex] ?? UPLOAD_ERR_NO_FILE,
                        'size' => $files['size'][$fileIndex] ?? 0,
                    ];
                    if ($image = upload_media('gallery_single')) {
                        $items[] = ['image' => $image, 'caption' => '', 'category' => $category, 'video_url' => '', 'instagram_url' => '', 'featured' => 0, 'active' => 1];
                        $uploaded++;
                    }
                }
                unset($_FILES['gallery_single']);
                if ($uploaded) {
                    $data['gallery_categories'] = array_values(array_unique(array_merge($categories, [$category])));
                    $data['gallery'] = $items;
                    save_site_data($data);
                    $message = $uploaded . ' image(s) added to ' . $category . '.';
                } else {
                    $message = 'No valid images were uploaded.';
                    $messageType = 'error';
                }
            } elseif ($action === 'delete' && $index !== null) {
                array_splice($items, $index, 1);
                collection_save('gallery', $items);
                $message = 'Gallery image removed.';
            } elseif ($action === 'save') {
                $item = [
                    'image' => posted_string('image'),
                    'caption' => posted_string('caption'),
                    'category' => posted_string('category', 'Weddings'),
                    'video_url' => posted_string('video_url'),
                    'instagram_url' => posted_string('instagram_url'),
                    'featured' => posted_bool('featured'),
                    'active' => posted_bool('active'),
                ];
                if ($image = upload_media('image_upload')) {
                    $item['image'] = $image;
                }
                if ($item['image'] === '') {
                    $message = 'Select an existing image or upload a new one.';
                    $messageType = 'error';
                } elseif ($index === null) {
                    $items[] = $item;
                    collection_save('gallery', $items);
                    $message = 'Gallery image added.';
                } else {
                    $items[$index] = array_merge($items[$index], $item);
                    collection_save('gallery', $items);
                    $message = 'Gallery image updated.';
                }
            }
        } elseif ($section === 'albums') {
            $items = array_values((array) ($data['featured_albums'] ?? []));
            if (!$items) {
                $galleryItems = array_values((array) ($data['gallery'] ?? []));
                foreach (gallery_categories($data) as $category) {
                    $categoryImages = array_values(array_filter($galleryItems, static fn (array $galleryItem): bool => trim((string) ($galleryItem['category'] ?? '')) === $category && trim((string) ($galleryItem['image'] ?? '')) !== ''));
                    if (!$categoryImages) continue;
                    $items[] = ['title' => $category, 'description' => 'A curated story from ' . $category, 'image' => (string) $categoryImages[0]['image'], 'images' => array_values(array_map(static fn (array $galleryItem): string => (string) $galleryItem['image'], array_slice($categoryImages, 0, 4)))];
                }
            }
            if (!$items) {
                $fallbackPortfolio = array_values(array_slice((array) ($data['portfolio'] ?? []), 0, 4));
                if ($fallbackPortfolio) $items[] = ['title' => 'Wedding stories', 'description' => 'A curated selection from our recent celebrations.', 'image' => (string) $fallbackPortfolio[0]['image'], 'images' => array_values(array_map(static fn (array $portfolioItem): string => (string) $portfolioItem['image'], $fallbackPortfolio))];
            }
            $index = item_index($items);
            if ($action === 'delete' && $index !== null) {
                array_splice($items, $index, 1);
                $data['featured_albums'] = $items;
                save_site_data($data);
                $message = 'Album removed.';
            } elseif ($action === 'save') {
                $images = array_values(array_filter(array_map('trim', preg_split('/\r\n|\n|\r/', posted_string('images', ''))), static fn (string $image): bool => $image !== ''));
                $item = [
                    'title' => posted_string('title'),
                    'description' => posted_string('description'),
                    'image' => posted_string('image', 'images/hero-wedding.jpeg'),
                    'images' => $images,
                ];
                if ($cover = upload_media('image_upload')) {
                    $item['image'] = $cover;
                }
                $item['images'] = array_values(array_unique(array_merge($item['images'], upload_media_many('album_images_upload'))));
                if ($item['title'] === '') {
                    $message = 'Add an album title.';
                    $messageType = 'error';
                } elseif ($index === null) {
                    $items[] = $item;
                    $data['featured_albums'] = $items;
                    save_site_data($data);
                    $message = 'Album added.';
                } else {
                    $items[$index] = array_merge($items[$index], $item);
                    $data['featured_albums'] = $items;
                    save_site_data($data);
                    $message = 'Album updated.';
                }
            }
        } elseif ($section === 'package') {
            $stepIndex = max(0, min(11, (int) posted_string('step', '0')));
            $steps = $data['package_steps'] ?? package_steps_defaults();
            $index = item_index($steps[$stepIndex]['options'] ?? []);
            if ($action === 'delete' && $index !== null) {
                array_splice($steps[$stepIndex]['options'], $index, 1);
                $data['package_steps'] = $steps;
                save_site_data($data);
                $message = 'Package option deleted.';
            } elseif ($action === 'save-step') {
                $steps[$stepIndex]['title'] = posted_string('step_title', $steps[$stepIndex]['title']);
                $steps[$stepIndex]['subtitle'] = posted_string('step_subtitle', $steps[$stepIndex]['subtitle']);
                $data['package_steps'] = $steps;
                save_site_data($data);
                $message = 'Package step updated.';
            } elseif ($action === 'save-option') {
                $item = ['name' => posted_string('name'), 'description' => posted_string('description'), 'price' => (float) posted_string('price', '0'), 'image' => posted_string('image')];
                if ($image = upload_media('image_upload')) $item['image'] = $image;
                if ($item['name'] === '') {
                    $message = 'Add an option name.';
                    $messageType = 'error';
                } elseif ($index === null) {
                    $steps[$stepIndex]['options'][] = $item;
                    $data['package_steps'] = $steps;
                    save_site_data($data);
                    $message = 'Package option added.';
                } else {
                    $steps[$stepIndex]['options'][$index] = array_merge($steps[$stepIndex]['options'][$index], $item);
                    $data['package_steps'] = $steps;
                    save_site_data($data);
                    $message = 'Package option updated.';
                }
            }
        } elseif ($section === 'quotes') {
            $group = posted_string('group', 'coverage');
            $allowedGroups = ['photography_types', 'coverage', 'events', 'add_ons'];
            if (in_array($group, $allowedGroups, true)) {
                $items = $data['quote_options'][$group] ?? [];
                $index = item_index($items);
                if ($action === 'delete' && $index !== null) {
                    array_splice($items, $index, 1);
                    $data['quote_options'][$group] = $items;
                    save_site_data($data);
                    $message = 'Quote option deleted.';
                } elseif ($action === 'save') {
                    $item = [
                        'name' => posted_string('name'),
                        'description' => posted_string('description'),
                        'price' => (float) posted_string('price', '0'),
                    ];
                    if ($index === null) {
                        $items[] = $item;
                        $message = 'Quote option added.';
                    } else {
                        $items[$index] = array_merge($items[$index], $item);
                        $message = 'Quote option updated.';
                    }
                    $data['quote_options'][$group] = $items;
                    save_site_data($data);
                }
            }
        } elseif ($section === 'leads') {
            $leads = read_json('leads.json');
            $index = item_index($leads);
            if ($action === 'delete' && $index !== null) {
                array_splice($leads, $index, 1);
                write_json('leads.json', $leads);
                $message = 'Lead deleted.';
            } elseif ($action === 'status' && $index !== null) {
                $leads[$index]['status'] = posted_string('status', 'New');
                write_json('leads.json', $leads);
                $message = 'Lead status updated.';
            }
        }
        if ($message !== null) {
            flash($message, $messageType);
            admin_redirect($section);
        }
    }
}

$data = site_data();
$leads = recent_leads();
$viewLead = null;
if ($section === 'leads' && isset($_GET['view'])) {
    $viewId = (string) $_GET['view'];
    foreach ($leads as $lead) {
        if ((string) ($lead['id'] ?? '') === $viewId) {
            $viewLead = $lead;
            break;
        }
    }
}
$media = media_library();
$editIndex = isset($_GET['edit']) && is_numeric($_GET['edit']) ? (int) $_GET['edit'] : null;
$dataSection = $section === 'hero' ? 'hero_slides' : ($section === 'albums' ? 'featured_albums' : $section);
$editing = $editIndex !== null ? ($data[$dataSection][$editIndex] ?? null) : null;
if ($section === 'quotes') {
    $editGroup = (string) ($_GET['group'] ?? 'coverage');
    $editing = $editIndex !== null ? ($data['quote_options'][$editGroup][$editIndex] ?? null) : null;
} else {
    $editGroup = 'coverage';
}
$packageSteps = $data['package_steps'] ?? package_steps_defaults();
$packageStepIndex = max(0, min(11, (int) ($_GET['step'] ?? 0)));
$packageOptions = $packageSteps[$packageStepIndex]['options'] ?? [];
$packageEditing = $editIndex !== null ? ($packageOptions[$editIndex] ?? null) : null;
$flash = take_flash();
$sectionTitles = [
    'content' => 'Site settings',
    'hero' => 'Hero slider',
    'stories' => 'Wedding Stories',
    'portfolio' => 'Portfolio stories',
    'services' => 'Services',
    'albums' => 'Featured albums',
    'testimonials' => 'Testimonials',
    'reels' => 'Behind the lens',
    'recognition' => 'Recognition',
    'about' => 'About page',
    'package' => 'Package builder',
    'leads' => 'Leads & requests',
];
$admin_active = $section === 'package' ? 'package' : $section;
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title><?= e($sectionTitles[$section]) ?> · <?= e($data['settings']['site_name']) ?></title>
    <link rel="stylesheet" href="<?= TVC_BASE_PATH ?>/assets/css/style.css">
    <style>
        .admin-shell{min-height:100vh;background:#f6f1e7}.admin-top{display:flex;justify-content:space-between;align-items:center;gap:2rem;padding:1.2rem 6vw;background:#0f2d22;color:#f6f1e7}.admin-logo img{width:178px;max-height:42px;object-fit:contain}.admin-top-links{display:flex;gap:1rem;align-items:center;flex-wrap:wrap;font:600 .65rem var(--wide);letter-spacing:.08em;text-transform:uppercase}.admin-main{max-width:1450px;margin:auto;padding:3.5rem 6vw}.admin-heading{display:flex;justify-content:space-between;align-items:end;gap:2rem;margin-bottom:2rem}.admin-heading h1{margin:0;color:#163d2e;font-size:clamp(2.8rem,6vw,6rem)}.admin-heading p{max-width:370px;color:#6f766f}.admin-nav{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:2rem}.admin-nav a{padding:.7rem .9rem;border:1px solid rgba(32,37,34,.15);font:600 .62rem var(--wide);letter-spacing:.08em;text-transform:uppercase}.admin-nav a.is-active,.admin-nav a:hover{background:#163d2e;color:#fcfaf5}.admin-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:1.5rem;align-items:start}.admin-card{padding:1.5rem;background:#fcfaf5;border:1px solid rgba(32,37,34,.12);margin-bottom:1.5rem}.admin-card h2{margin:0 0 1rem;color:#163d2e;font-size:2rem}.admin-form{display:grid;gap:1rem}.admin-fields{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.admin-fields .full{grid-column:1/-1}.admin-fields label{display:grid;gap:.4rem}.admin-fields label span{font:600 .62rem var(--wide);letter-spacing:.1em;text-transform:uppercase;color:#6f766f}.admin-fields input,.admin-fields select,.admin-fields textarea{width:100%;padding:.75rem;border:1px solid rgba(32,37,34,.18);background:#fffdf8;color:#202522}.admin-fields textarea{min-height:110px;resize:vertical}.admin-actions{display:flex;gap:.6rem;flex-wrap:wrap;align-items:center}.admin-actions .button{border:0}.admin-list{display:grid;gap:.7rem}.admin-row{display:grid;grid-template-columns:74px 1fr auto;gap:1rem;align-items:center;padding:.8rem 0;border-top:1px solid rgba(32,37,34,.12)}.admin-row img{width:74px;height:64px;object-fit:cover}.admin-row strong{display:block;font:1.2rem var(--serif);color:#163d2e}.admin-row small{color:#6f766f}.admin-row-actions{display:flex;gap:.5rem;align-items:center}.admin-row-actions a,.admin-row-actions button{padding:.45rem .6rem;border:1px solid rgba(32,37,34,.18);background:transparent;color:#163d2e;font:600 .58rem var(--wide);text-transform:uppercase;letter-spacing:.06em}.admin-row-actions button{cursor:pointer}.admin-stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.7rem;margin-bottom:1.5rem}.admin-stat{padding:1.1rem;background:#163d2e;color:#fcfaf5}.admin-stat strong{display:block;font:2rem var(--serif)}.admin-stat span{font:600 .58rem var(--wide);letter-spacing:.08em;text-transform:uppercase;color:#c89442}.admin-table-wrap{overflow:auto}.admin-table{width:100%;border-collapse:collapse;min-width:680px}.admin-table th,.admin-table td{padding:.8rem;border-bottom:1px solid rgba(32,37,34,.12);text-align:left;font-size:.78rem;vertical-align:top}.admin-table th{color:#6f766f;font:600 .6rem var(--wide);letter-spacing:.08em;text-transform:uppercase}.admin-table form{display:inline-flex;gap:.4rem}.admin-table select{padding:.35rem}.admin-help{color:#6f766f;font-size:.8rem;line-height:1.6}.flash{position:static;transform:none;margin:0 auto 1.5rem;max-width:none}.media-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.7rem}.media-grid img{width:100%;height:110px;object-fit:cover}.media-grid label{display:grid;gap:.4rem;color:#6f766f;font-size:.7rem}.media-grid input{accent-color:#163d2e}.json-note{font:600 .6rem var(--wide);letter-spacing:.05em;color:#6f766f;text-transform:uppercase}.danger{color:#8d3d34!important}@media(max-width:850px){.admin-grid{grid-template-columns:1fr}.admin-fields{grid-template-columns:1fr}.admin-fields .full{grid-column:auto}.admin-stat-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:560px){.admin-top{align-items:flex-start;flex-direction:column}.admin-main{padding:2rem 5vw}.admin-heading{display:block}.admin-row{grid-template-columns:56px 1fr}.admin-row img{width:56px;height:50px}.admin-row-actions{grid-column:2}.media-grid{grid-template-columns:repeat(2,1fr)}}
        .admin-form > .button:last-child,.admin-form > .admin-actions:last-child{align-self:end;position:sticky;top:1rem;z-index:3}.admin-card form.admin-form .admin-actions{justify-content:flex-end}.admin-actions form{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}@media(max-width:800px){.admin-grid,.admin-fields{grid-template-columns:1fr}.admin-heading{display:block}.admin-heading p{margin-top:1rem}}
    </style>
</head>
<body class="admin-shell admin-layout">
<?php include __DIR__ . '/sidebar.php'; ?>
<header class="admin-top">
    <a class="admin-logo" href="<?= TVC_BASE_PATH ?>/admin/index.php"><img src="<?= TVC_BASE_PATH ?>/<?= e(ltrim((string) ($data['settings']['logo'] ?? 'images/logo.png'), '/')) ?>" alt="<?= e($data['settings']['site_name']) ?>"></a>
    <nav class="admin-top-links"><a href="<?= TVC_BASE_PATH ?>/" target="_blank">View site ↗</a><a href="<?= TVC_BASE_PATH ?>/admin/settings.php">Settings</a><a href="<?= TVC_BASE_PATH ?>/admin/logout.php">Log out</a></nav>
</header>
<main class="admin-main">
    <div class="admin-heading"><div><p class="eyebrow">PRIVATE STUDIO</p><h1><?= e($sectionTitles[$section]) ?></h1></div><p>Edit the live experience without touching the PHP templates. Changes use the JSON fallback locally and sync to MySQL when configured.</p></div>
    <?php if ($flash): ?><div class="flash flash-<?= e($flash['type']) ?>" role="status"><?= e($flash['message']) ?></div><?php endif; ?>

    <?php if ($section === 'hero'): ?>
        <?php $heroSlides = array_values((array) ($data['hero_slides'] ?? default_hero_slides())); $item = is_array($editing) ? $editing : []; ?>
        <div class="admin-grid">
            <section class="admin-card"><p class="eyebrow">HERO SLIDES</p><h2>Responsive image sets</h2><div class="admin-list">
                <?php foreach ($heroSlides as $index => $slide): ?><div class="admin-row"><img src="<?= TVC_BASE_PATH ?>/<?= e($slide['desktop'] ?? 'images/hero-wedding.jpeg') ?>" alt="<?= e($slide['title'] ?? 'Hero slide') ?>"><div><strong><?= e($slide['title'] ?? 'Hero slide') ?></strong><small>Desktop, tablet and mobile images</small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=hero&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this hero slide?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?>
            </div></section>
            <section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT SLIDE' : 'NEW SLIDE' ?></p><h2>Choose the right frame.</h2><form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?><div class="admin-fields"><label class="full"><span>Slide name</span><input name="title" value="<?= e($item['title'] ?? '') ?>" placeholder="Optional internal name"></label><?php foreach (['desktop' => 'Desktop image', 'tablet' => 'Tablet image', 'mobile' => 'Mobile image'] as $device => $label): ?><label class="full"><span><?= $label ?> path</span><select name="<?= $device ?>"><option value="">Use automatic fallback</option><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($item[$device] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Upload <?= strtolower($label) ?></span><input type="file" name="<?= $device ?>_upload" accept=".jpg,.jpeg,.png,.webp,.gif,.avif" <?= $device === 'desktop' && !$editing ? 'required' : '' ?>></label><?php endforeach; ?><label><span><input type="checkbox" name="active" <?= !isset($item['active']) || $item['active'] ? 'checked' : '' ?>> Active slide</span></label></div><div class="admin-actions"><button class="button button-dark" type="submit"><?= $editing ? 'Update slide' : 'Add slide' ?> <span>↗</span></button></div></form></section>
        </div>
    <?php elseif ($section === 'content'): ?>
        <form class="admin-form" method="post" enctype="multipart/form-data">
            <input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save">
            <section class="admin-card"><p class="eyebrow">GENERAL</p><h2>Brand and contact</h2><div class="admin-fields">
                <label><span>Site name</span><input name="site_name" value="<?= e($data['settings']['site_name']) ?>" required></label>
                <label><span>Tagline</span><input name="tagline" value="<?= e($data['settings']['tagline']) ?>"></label>
                <label><span>Location</span><input name="location" value="<?= e($data['settings']['location']) ?>"></label>
                <label><span>Email</span><input type="email" name="email" value="<?= e($data['settings']['email']) ?>"></label>
                <label><span>SMTP host</span><input name="smtp_host" value="<?= e($data['settings']['smtp_host'] ?? '') ?>" placeholder="smtp.gmail.com"></label>
                <label><span>SMTP port</span><input name="smtp_port" value="<?= e($data['settings']['smtp_port'] ?? '587') ?>" placeholder="587"></label>
                <label><span>SMTP username</span><input name="smtp_username" value="<?= e($data['settings']['smtp_username'] ?? '') ?>" placeholder="your-email@gmail.com"></label>
                <label><span>SMTP password</span><input type="password" name="smtp_password" value="<?= e($data['settings']['smtp_password'] ?? '') ?>" placeholder="App password"></label>
                <label><span>SMTP encryption</span><select name="smtp_encryption"><option value="tls" <?= (($data['settings']['smtp_encryption'] ?? 'tls') === 'tls') ? 'selected' : '' ?>>TLS</option><option value="ssl" <?= (($data['settings']['smtp_encryption'] ?? '') === 'ssl') ? 'selected' : '' ?>>SSL</option><option value="" <?= (($data['settings']['smtp_encryption'] ?? '') === '') ? 'selected' : '' ?>>None</option></select></label>
                <label><span>Mailer name</span><input name="mailer_from_name" value="<?= e($data['settings']['mailer_from_name'] ?? $data['settings']['site_name']) ?>"></label>
                <label><span>Mailer email</span><input type="email" name="mailer_from_email" value="<?= e($data['settings']['mailer_from_email'] ?? $data['settings']['email']) ?>"></label>
                <label><span>Phone</span><input name="phone" value="<?= e($data['settings']['phone']) ?>"></label>
                <label><span>WhatsApp number</span><input name="whatsapp" value="<?= e($data['settings']['whatsapp']) ?>"></label>
                <label class="full"><span>WhatsApp message</span><input name="whatsapp_message" value="<?= e($data['settings']['whatsapp_message']) ?>"></label>
                <label class="full"><span>Footer description</span><textarea name="footer"><?= e($data['settings']['footer']) ?></textarea></label>
                <label class="full"><span>Copyright</span><input name="copyright" value="<?= e($data['settings']['copyright']) ?>"></label>
            </div></section>
            <section class="admin-card"><p class="eyebrow">SEO & BRAND</p><h2>Search and sharing</h2><div class="admin-fields">
                <label><span>Business name</span><input name="business_name" value="<?= e($data['settings']['business_name'] ?? '') ?>"></label>
                <label><span>Primary color</span><input name="primary_color" type="color" value="<?= e($data['settings']['primary_color'] ?? '#163D2E') ?>"></label>
                <label><span>Accent color</span><input name="accent_color" type="color" value="<?= e($data['settings']['accent_color'] ?? '#C89442') ?>"></label>
                <label><span>Header logo path</span><select name="header_logo"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($data['settings']['header_logo'] ?? $data['settings']['logo'] ?? 'images/logo.png') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label>
                <label><span>Upload header logo</span><input name="header_logo_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label>
                <label><span>Footer logo path</span><select name="footer_logo"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($data['settings']['footer_logo'] ?? $data['settings']['logo'] ?? 'images/logo.png') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label>
                <label><span>Upload footer logo</span><input name="footer_logo_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label>
                <label><span>Favicon path</span><input name="favicon" value="<?= e($data['settings']['favicon'] ?? 'images/logo.png') ?>"></label>
                <label><span>Upload favicon</span><input name="favicon_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.ico"></label>
                <label class="full"><span>OG image path</span><input name="og_image" value="<?= e($data['settings']['og_image'] ?? $data['hero']['image']) ?>"></label>
                <label><span>Upload OG image</span><input name="og_image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif"></label>
                <label class="full"><span>SEO title</span><input name="seo_title" value="<?= e($data['settings']['seo_title'] ?? '') ?>"></label>
                <label class="full"><span>SEO description</span><textarea name="seo_description"><?= e($data['settings']['seo_description'] ?? '') ?></textarea></label>
                <label><span>Robots</span><select name="robots"><option value="index,follow" <?= ($data['settings']['robots'] ?? '') === 'index,follow' ? 'selected' : '' ?>>Index and follow</option><option value="noindex,nofollow" <?= ($data['settings']['robots'] ?? '') === 'noindex,nofollow' ? 'selected' : '' ?>>No index</option></select></label>
                <label><span>Instagram URL</span><input type="url" name="instagram" value="<?= e($data['settings']['instagram'] ?? '') ?>"></label>
                <label><span>Facebook URL</span><input type="url" name="facebook" value="<?= e($data['settings']['facebook'] ?? '') ?>"></label>
                <label><span>YouTube URL</span><input type="url" name="youtube" value="<?= e($data['settings']['youtube'] ?? '') ?>"></label>
                <label><span>Pinterest URL</span><input type="url" name="pinterest" value="<?= e($data['settings']['pinterest'] ?? '') ?>"></label>
                <label><span>LinkedIn URL</span><input type="url" name="linkedin" value="<?= e($data['settings']['linkedin'] ?? '') ?>"></label>
                <label><span>X / Twitter URL</span><input type="url" name="x_twitter" value="<?= e($data['settings']['x_twitter'] ?? '') ?>"></label>
            </div></section>
            <section class="admin-card"><p class="eyebrow">CTA CARD</p><h2>Conversion prompt</h2><div class="admin-fields">
                <label><span>Title</span><input name="cta_title" value="<?= e($data['cta_card']['title'] ?? '') ?>"></label><label><span>Button label</span><input name="cta_label" value="<?= e($data['cta_card']['label'] ?? '') ?>"></label><label class="full"><span>Text</span><textarea name="cta_text"><?= e($data['cta_card']['text'] ?? '') ?></textarea></label><label><span>Button URL</span><input name="cta_url" value="<?= e($data['cta_card']['url'] ?? '/contact') ?>"></label><label><span>Image path</span><select name="cta_image"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($data['cta_card']['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Upload CTA image</span><input type="file" name="cta_image_upload" accept=".jpg,.jpeg,.png,.webp,.gif"></label>
            </div></section>
            <div class="admin-actions admin-content-actions"><button class="button button-dark" type="submit">Save website content <span>↗</span></button><button class="button button-outline" type="submit" name="action" value="test-mail">Send test email <span>↗</span></button></div>
        </form>
    <?php elseif ($section === 'stories'): ?>
        <?php $storyItems = array_values((array) ($data['stories'] ?? [])); $item = is_array($editing) ? $editing : []; ?>
        <div class="admin-grid"><section class="admin-card"><p class="eyebrow">WEDDING STORIES</p><h2>Manage the vertical pill images</h2><p class="admin-help">These images belong only to the Wedding Stories loop. They are independent from Portfolio images.</p><form class="admin-actions story-bulk-upload" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="bulk-upload"><input type="file" name="story_images_upload[]" accept=".jpg,.jpeg,.png,.webp,.gif,.avif" multiple required><button class="button button-dark" type="submit">Upload multiple stories</button></form><div class="admin-list">
            <?php foreach ($storyItems as $storyIndex => $story): ?><div class="admin-row"><img src="<?= TVC_BASE_PATH ?>/<?= e($story['image'] ?? 'images/hero-wedding.jpeg') ?>" alt=""><div><strong><?= e($story['title'] ?? 'Wedding story') ?></strong><small><?= e('Pill ' . ($storyIndex + 1)) ?></small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=stories&amp;edit=<?= $storyIndex ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this story image?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="index" value="<?= $storyIndex ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?>
        </div></section><section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT IMAGE' : 'ADD IMAGE' ?></p><h2><?= $editing ? 'Refine this frame.' : 'Add a separate frame.' ?></h2><form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?><div class="admin-fields"><label class="full"><span>Image title</span><input name="title" value="<?= e($item['title'] ?? '') ?>" placeholder="Optional label"></label><label class="full"><span>Existing image</span><select name="image"><option value="">Select an image</option><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($item['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Or upload a separate image</span><input name="image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label></div><div class="admin-actions"><button class="button button-dark" type="submit"><?= $editing ? 'Update image' : 'Add image' ?> <span>↗</span></button></div></form></section></div>
    <?php elseif ($section === 'portfolio'): ?>
        <?php $portfolio = $data['portfolio']; $item = is_array($editing) ? $editing : []; $portfolioCategories = array_values(array_unique(array_filter(array_map('trim', (array) ($data['portfolio_categories'] ?? []))))); $portfolioHero = is_array($data['portfolio_hero'] ?? null) ? $data['portfolio_hero'] : ['image' => 'images/hero-wedding.jpeg']; ?>
        <section class="admin-card portfolio-hero-editor"><p class="eyebrow">PORTFOLIO HERO</p><h2>Choose the first frame.</h2><form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save-portfolio-hero"><div class="admin-fields"><label class="full"><span>Hero image</span><select name="portfolio_hero_image"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($portfolioHero['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Or upload hero image</span><input type="file" name="portfolio_hero_upload" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label></div><div class="admin-actions"><button class="button button-dark" type="submit">Save hero image <span>↗</span></button></div></form></section>
        <section class="admin-card"><p class="eyebrow">PORTFOLIO CATEGORIES</p><h2>Organize and assign work</h2><div class="admin-category-pills"><?php foreach ($portfolioCategories as $category): ?><form class="admin-category-pill" method="post" onsubmit="return confirm('Remove this category?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete-category"><input type="hidden" name="category_name" value="<?= e($category) ?>"><span><?= e($category) ?></span><button type="submit" aria-label="Remove <?= e($category) ?>" title="Remove category">×</button></form><?php endforeach; ?></div><div class="admin-actions"><form method="post"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save-category"><input name="category_name" placeholder="New category name" required><button class="button button-dark" type="submit">Create category</button></form></div><form id="portfolio-bulk-form" class="admin-actions" method="post"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="bulk-category"><select name="category_name" required><option value="">Assign selected to...</option><?php foreach ($portfolioCategories as $category): ?><option value="<?= e($category) ?>"><?= e($category) ?></option><?php endforeach; ?></select><button class="button button-dark" type="submit">Assign selected images</button></form><form class="admin-actions portfolio-bulk-upload" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="bulk-upload"><select name="category_name" required><?php foreach ($portfolioCategories as $category): ?><option value="<?= e($category) ?>"><?= e($category) ?></option><?php endforeach; ?></select><input type="file" name="portfolio_uploads[]" accept=".jpg,.jpeg,.png,.webp,.gif,.avif" multiple required><button class="button button-dark" type="submit">Upload portfolio images</button></form></section>
        <div class="admin-grid"><section class="admin-card"><p class="eyebrow">STORIES</p><h2>Published work</h2><div class="admin-list"><?php foreach ($portfolio as $index => $story): ?><div class="admin-row"><label aria-label="Select <?= e($story['title'] ?? 'story') ?>"><input type="checkbox" name="portfolio_indexes[]" value="<?= $index ?>" form="portfolio-bulk-form"></label><img src="<?= TVC_BASE_PATH ?>/<?= e($story['image'] ?? 'images/hero-wedding.jpeg') ?>" alt=""><div><strong><?= e($story['title'] ?? '') ?></strong><small><?= e(($story['category'] ?? '') . ' · ' . ($story['location'] ?? '')) ?></small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=portfolio&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this story?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?></div></section>
            <section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT STORY' : 'NEW STORY' ?></p><h2><?= $editing ? 'Refine the frame.' : 'Add a story.' ?></h2><form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?><div class="admin-fields"><label><span>Title</span><input name="title" value="<?= e($item['title'] ?? '') ?>" required></label><label><span>Slug</span><input name="slug" value="<?= e($item['slug'] ?? '') ?>"></label><label><span>Category</span><input name="category" value="<?= e($item['category'] ?? 'Weddings') ?>"></label><label><span>Location</span><input name="location" value="<?= e($item['location'] ?? '') ?>"></label><label><span>Event date</span><input name="event_date" type="date" value="<?= e($item['event_date'] ?? '') ?>"></label><label><span>Status</span><select name="status"><option value="published" <?= ($item['status'] ?? 'published') === 'published' ? 'selected' : '' ?>>Published</option><option value="draft" <?= ($item['status'] ?? '') === 'draft' ? 'selected' : '' ?>>Draft</option></select></label><label class="full"><span>Description</span><textarea name="description"><?= e($item['description'] ?? '') ?></textarea></label><label class="full"><span>Image path</span><select name="image"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($item['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Or upload image</span><input name="image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif"></label><label><span><input type="checkbox" name="featured" <?= !empty($item['featured']) ? 'checked' : '' ?>> Featured story</span></label></div><div class="admin-actions"><button class="button button-dark" type="submit">Save story <span>↗</span></button><a class="button" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=portfolio">Clear</a></div></form></section></div>
    <?php if ($section === 'portfolio'): ?><script>
        document.addEventListener('DOMContentLoaded', () => {
            const fields = document.querySelector('.admin-grid .admin-card form.admin-form .admin-fields');
            if (fields && !fields.querySelector('[name="show_text"]')) {
                fields.insertAdjacentHTML('beforeend', '<label><span><input type="checkbox" name="show_text" <?= !isset($item['show_text']) || $item['show_text'] ? 'checked' : '' ?>> Show text on image</span></label>');
            }
            const categoryInput = fields?.querySelector('input[name="category"]');
            if (categoryInput) {
                const categorySelect = document.createElement('select');
                categorySelect.name = 'category';
                <?= json_encode($portfolioCategories ?? [], JSON_UNESCAPED_SLASHES) ?>.forEach((category) => {
                    categorySelect.add(new Option(category, category, category === categoryInput.value, category === categoryInput.value));
                });
                categoryInput.replaceWith(categorySelect);
            }
            const bulkForm = document.querySelector('#portfolio-bulk-form');
            if (bulkForm) {
                const deleteButton = document.createElement('button');
                deleteButton.className = 'danger';
                deleteButton.type = 'submit';
                deleteButton.textContent = 'Delete selected images';
                deleteButton.addEventListener('click', (event) => {
                    if (!confirm('Delete the selected portfolio images? This cannot be undone.')) {
                        event.preventDefault();
                        return;
                    }
                    const category = bulkForm.querySelector('select[name="category_name"]');
                    if (category) category.required = false;
                    const action = bulkForm.querySelector('input[name="action"]');
                    if (action) action.value = 'bulk-delete';
                });
                bulkForm.append(deleteButton);
            }
        });
    </script><?php endif; ?>
    <?php elseif ($section === 'albums'): ?>
                <?php $albums = array_values((array) ($data['featured_albums'] ?? [])); if (!$albums) { $galleryItems = array_values((array) ($data['gallery'] ?? [])); foreach (gallery_categories($data) as $category) { $categoryImages = array_values(array_filter($galleryItems, static fn (array $galleryItem): bool => trim((string) ($galleryItem['category'] ?? '')) === $category && trim((string) ($galleryItem['image'] ?? '')) !== '')); if ($categoryImages) $albums[] = ['title' => $category, 'description' => 'A curated story from ' . $category, 'image' => (string) $categoryImages[0]['image'], 'images' => array_values(array_map(static fn (array $galleryItem): string => (string) $galleryItem['image'], array_slice($categoryImages, 0, 4)))]; } } if (!$albums) { $fallbackPortfolio = array_values(array_slice((array) ($data['portfolio'] ?? []), 0, 4)); if ($fallbackPortfolio) $albums[] = ['title' => 'Wedding stories', 'description' => 'A curated selection from our recent celebrations.', 'image' => (string) $fallbackPortfolio[0]['image'], 'images' => array_values(array_map(static fn (array $portfolioItem): string => (string) $portfolioItem['image'], $fallbackPortfolio))]; } $item = is_array($editing) ? $editing : (($editIndex !== null && isset($albums[$editIndex])) ? $albums[$editIndex] : []); ?>
        <div class="admin-grid">
            <section class="admin-card"><p class="eyebrow">FEATURED ALBUMS</p><h2>Manage homepage albums</h2><p class="admin-help">Each album opens as a private lightbox collection on the homepage. Add a cover image and upload multiple album images at once.</p><div class="admin-list">
                <?php foreach ($albums as $index => $album): ?><div class="admin-row"><img src="<?= TVC_BASE_PATH ?>/<?= e($album['image'] ?? 'images/hero-wedding.jpeg') ?>" alt=""><div><strong><?= e($album['title'] ?? 'Untitled album') ?></strong><small><?= count((array) ($album['images'] ?? [])) ?> album images</small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=albums&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this album?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?>
                <?php if (!$albums): ?><p class="admin-help">No featured albums yet. Add the first one using the form.</p><?php endif; ?>
            </div></section>
            <section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT ALBUM' : 'NEW ALBUM' ?></p><h2><?= $editing ? 'Refine this collection.' : 'Create a collection.' ?></h2><form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?><div class="admin-fields"><label class="full"><span>Album title</span><input name="title" value="<?= e($item['title'] ?? '') ?>" required></label><label class="full"><span>Description</span><textarea name="description"><?= e($item['description'] ?? '') ?></textarea></label><label class="full"><span>Cover image</span><select name="image"><option value="">Select an image</option><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($item['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Or upload cover image</span><input name="image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label><label class="full"><span>Upload album images (choose multiple)</span><input name="album_images_upload[]" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.avif" multiple></label><label class="full"><span>Existing album image paths (one per line)</span><textarea name="images" placeholder="images/photo-one.jpg&#10;images/photo-two.jpg"><?= e(implode("\n", array_values((array) ($item['images'] ?? [])))) ?></textarea></label></div><div class="admin-actions"><button class="button button-dark" type="submit"><?= $editing ? 'Update album' : 'Add album' ?> <span>↗</span></button></div></form></section>
        </div>
    <?php elseif ($section === 'services'): ?>
        <?php $services = $data['services']; $item = is_array($editing) ? $editing : []; ?>
        <div class="admin-grid"><section class="admin-card"><p class="eyebrow">SERVICES</p><h2>What you offer</h2><div class="admin-list"><?php foreach ($services as $index => $service): ?><div class="admin-row"><img src="<?= TVC_BASE_PATH ?>/<?= e($service['image'] ?? 'images/hero-wedding.jpeg') ?>" alt=""><div><strong><?= e($service['title'] ?? '') ?></strong><small><?= e($service['description'] ?? '') ?></small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=services&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this service?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?></div></section><section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT SERVICE' : 'NEW SERVICE' ?></p><h2><?= $editing ? 'Refine the offer.' : 'Add a service.' ?></h2><form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?><div class="admin-fields"><label><span>Title</span><input name="title" value="<?= e($item['title'] ?? '') ?>" required></label><label><span>Number</span><input name="number" value="<?= e($item['number'] ?? sprintf('%02d', count($services) + 1)) ?>"></label><label class="full"><span>Description</span><textarea name="description"><?= e($item['description'] ?? '') ?></textarea></label><label class="full"><span>Features (one per line)</span><textarea name="features"><?= e(implode("\n", $item['features'] ?? [])) ?></textarea></label><label><span>Optional price</span><input name="price" value="<?= e((string) ($item['price'] ?? '')) ?>"></label><label><span>Image path</span><select name="image"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($item['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Or upload image</span><input name="image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif"></label><label><span><input type="checkbox" name="active" <?= !isset($item['active']) || $item['active'] ? 'checked' : '' ?>> Visible on site</span></label></div><div class="admin-actions"><button class="button button-dark" type="submit">Save service <span>↗</span></button><a class="button" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=services">Clear</a></div></form></section></div>
    <?php elseif (in_array($section, ['testimonials', 'reels', 'recognition'], true)): ?>
        <?php
        $items = array_values((array) ($data[$section] ?? []));
        if ($section === 'testimonials' && !$items) {
            $items = default_testimonials();
        }
        $item = is_array($editing) ? $editing : [];
        $labels = ['testimonials' => ['Testimonial', 'Client love'], 'reels' => ['Reel', 'BEHIND THE LENS'], 'recognition' => ['Recognition card', 'RECOGNITION']];
        $label = $labels[$section];
        ?>
        <div class="admin-grid">
            <section class="admin-card"><p class="eyebrow"><?= e($label[1]) ?></p><h2>Manage entries</h2>
                <div class="admin-list">
                    <?php foreach ($items as $index => $entry): ?>
                        <div class="admin-row">
                            <?php if (!empty($entry['image'])): ?><img src="<?= TVC_BASE_PATH ?>/<?= e($entry['image']) ?>" alt=""><?php else: ?><div></div><?php endif; ?>
                            <div><strong><?= e($entry['title'] ?? $entry['name'] ?? 'Untitled') ?></strong><small><?= e($entry['category'] ?? $entry['meta'] ?? $entry['detail'] ?? '') ?></small></div>
                            <div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=<?= e($section) ?>&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this item?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div>
                        </div>
                    <?php endforeach; ?>
                </div>
            </section>
            <section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT' : 'NEW' ?> <?= e(strtoupper($label[0])) ?></p><h2><?= $editing ? 'Update this entry.' : 'Add an entry.' ?></h2>
                <form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?>
                    <div class="admin-fields">
                        <?php if ($section === 'testimonials'): ?>
                            <label><span>Client name</span><input name="name" value="<?= e($item['name'] ?? '') ?>" required></label><label><span>Rating</span><input name="rating" type="number" min="1" max="5" value="<?= e((string) ($item['rating'] ?? 5)) ?>"></label><label class="full"><span>Quote</span><textarea name="quote" required><?= e($item['quote'] ?? '') ?></textarea></label><label class="full"><span>Location and date</span><input name="meta" value="<?= e($item['meta'] ?? '') ?>"></label>
                        <?php elseif ($section === 'reels'): ?>
                            <label><span>Title</span><input name="title" value="<?= e($item['title'] ?? '') ?>" required></label><label><span>Category</span><input name="category" value="<?= e($item['category'] ?? 'Weddings') ?>"></label><label class="full"><span>Caption</span><input name="caption" value="<?= e($item['caption'] ?? '') ?>"></label><label class="full"><span>Instagram reel URL (optional)</span><input name="instagram_url" type="url" placeholder="https://www.instagram.com/reel/..." value="<?= e($item['instagram_url'] ?? '') ?>"></label><label class="full"><span>Upload video file (MP4, WebM or MOV)</span><input name="video_upload" type="file" accept="video/mp4,video/webm,video/quicktime"></label>
                        <?php else: ?>
                            <label class="full"><span>Recognition title</span><input name="title" value="<?= e($item['title'] ?? '') ?>" required></label><label class="full"><span>Detail</span><textarea name="detail"><?= e($item['detail'] ?? '') ?></textarea></label><label><span>Icon</span><select name="icon"><?php foreach (['award', 'star', 'camera', 'heart'] as $icon): ?><option value="<?= $icon ?>" <?= ($item['icon'] ?? 'award') === $icon ? 'selected' : '' ?>><?= ucfirst($icon) ?></option><?php endforeach; ?></select></label>
                        <?php endif; ?>
                        <?php if ($section !== 'recognition'): ?><label class="full"><span>Existing cover image (optional)</span><select name="image"><option value="">Auto-create from uploaded video</option><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($item['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Upload cover image (optional)</span><input name="image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label><?php endif; ?>
                    </div>
                    <div class="admin-actions"><button class="button button-dark" type="submit"><?= $editing ? 'Update' : 'Add' ?> <?= e($label[0]) ?> <span>↗</span></button></div>
                </form>
            </section>
        </div>
    <?php elseif ($section === 'about'): ?>
        <?php $about = is_array($data['about'] ?? null) ? $data['about'] : default_about_content(); $founder = is_array($about['founder_story'] ?? null) ? $about['founder_story'] : default_founder_story(); $founderFaqs = array_values((array) ($founder['faqs'] ?? [])); ?>
        <form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save">
            <section class="admin-card"><p class="eyebrow">ABOUT PAGE</p><h2>Studio story and CTA</h2><div class="admin-fields"><label class="full"><span>Page heading</span><textarea name="heading" required><?= e($about['heading']) ?></textarea></label><label class="full"><span>Introduction</span><textarea name="intro" required><?= e($about['intro']) ?></textarea></label><label class="full"><span>Our approach</span><textarea name="story" required><?= e($about['story']) ?></textarea></label><label><span>CTA title</span><input name="cta_title" value="<?= e($about['cta_title']) ?>"></label><label><span>CTA text</span><textarea name="cta_text"><?= e($about['cta_text']) ?></textarea></label></div></section>
            <section class="admin-card"><p class="eyebrow">ABOUT IMAGES</p><h2>Manage page imagery</h2><div class="admin-fields"><label class="full"><span>Main image path</span><select name="image"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($about['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Upload main image</span><input type="file" name="image_upload" accept=".jpg,.jpeg,.png,.webp,.gif"></label><?php foreach (['one', 'two'] as $slot): ?><label><span>Secondary image <?= $slot ?></span><select name="secondary_images[]"><option value="">None</option><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($about['secondary_images'][$slot === 'one' ? 0 : 1] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><?php endforeach; ?><label><span>Upload secondary image one</span><input type="file" name="secondary_image_one" accept=".jpg,.jpeg,.png,.webp,.gif"></label><label><span>Upload secondary image two</span><input type="file" name="secondary_image_two" accept=".jpg,.jpeg,.png,.webp,.gif"></label></div></section>
            <section class="admin-card"><p class="eyebrow">FOUNDER STORY</p><h2>One shared section, two pages.</h2><p class="admin-help">This section appears near the top of both the homepage and About page. Keep the intro paragraphs separated by line breaks.</p><div class="admin-fields"><label><span>Eyebrow</span><input name="founder_eyebrow" value="<?= e($founder['eyebrow'] ?? '') ?>"></label><label><span>Founder name</span><input name="founder_name" value="<?= e($founder['name'] ?? '') ?>"></label><label class="full"><span>Heading</span><input name="founder_heading" value="<?= e($founder['heading'] ?? '') ?>"></label><label class="full"><span>Intro paragraphs</span><textarea name="founder_intro"><?= e($founder['intro'] ?? '') ?></textarea></label><label><span>Role</span><input name="founder_role" value="<?= e($founder['role'] ?? '') ?>"></label><label><span>Instagram URL</span><input type="url" name="founder_instagram" value="<?= e($founder['instagram'] ?? '') ?>"></label><label><span>YouTube URL</span><input type="url" name="founder_youtube" value="<?= e($founder['youtube'] ?? '') ?>"></label><label class="full"><span>Founder image</span><select name="founder_image"><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($founder['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Upload founder image</span><input type="file" name="founder_image_upload" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label></div><h3 class="admin-subheading">FAQ accordions</h3><div class="founder-faq-admin-list"><?php foreach ($founderFaqs as $faqIndex => $faq): ?><div class="founder-faq-admin-row"><label><span>Question</span><input name="founder_faq_question[]" value="<?= e($faq['question'] ?? '') ?>"></label><label><span>Answer</span><textarea name="founder_faq_answer[]"><?= e($faq['answer'] ?? '') ?></textarea></label><button class="admin-faq-remove" type="button">Remove FAQ</button></div><?php endforeach; ?></div><button class="button button-outline admin-faq-add" type="button">Add FAQ <span>+</span></button></section>
            <div class="admin-actions"><button class="button button-dark" type="submit">Save About page <span>↗</span></button></div>
        </form>
    <?php elseif ($section === 'gallery'): ?>
        <?php $gallery = $data['gallery'] ?? []; $galleryCategories = gallery_categories($data); $galleryFilter = posted_string('category', (string) ($_GET['category'] ?? '')); if ($galleryFilter !== '') { $gallery = array_filter($gallery, static fn (array $image): bool => ($image['category'] ?? '') === $galleryFilter); } $item = is_array($editing) ? $editing : []; ?>
        <section class="admin-card gallery-category-card"><p class="eyebrow">GALLERY CATEGORIES</p><h2>Organize the library.</h2><div class="admin-category-links"><a class="<?= $galleryFilter === '' ? 'is-active' : '' ?>" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=gallery">All <span><?= count($data['gallery'] ?? []) ?></span></a><?php foreach ($galleryCategories as $category): ?><a class="<?= $galleryFilter === $category ? 'is-active' : '' ?>" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=gallery&amp;category=<?= rawurlencode($category) ?>"><?= e($category) ?> <span><?= count(array_filter($data['gallery'] ?? [], static fn (array $image): bool => ($image['category'] ?? '') === $category)) ?></span></a><?php endforeach; ?></div><div class="admin-category-actions"><form method="post"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save-category"><input name="category_name" placeholder="New category name" required><button class="button button-dark" type="submit">Create category</button></form><?php foreach ($galleryCategories as $category): ?><form method="post" onsubmit="return confirm('Delete this category? Its images will move to Weddings.')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete-category"><input type="hidden" name="category_name" value="<?= e($category) ?>"><button class="admin-category-delete" type="submit">Remove <?= e($category) ?></button></form><?php endforeach; ?></div><form class="gallery-bulk-upload" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="bulk-upload"><label><span>Assign uploads to</span><select name="category"><?php foreach ($galleryCategories as $category): ?><option value="<?= e($category) ?>"><?= e($category) ?></option><?php endforeach; ?></select></label><label><span>Add multiple images</span><input type="file" name="gallery_uploads[]" accept=".jpg,.jpeg,.png,.webp,.gif,.avif" multiple required></label><button class="button button-dark" type="submit">Upload images</button></form></section>
        <div class="admin-grid"><section class="admin-card"><p class="eyebrow">MEDIA LIBRARY</p><h2>Gallery images</h2><p class="admin-help">Existing local images can be selected anywhere in the admin. Uploads are MIME-checked, limited to 8 MB and assigned secure filenames.</p><div class="admin-list"><?php foreach ($gallery as $index => $image): ?><div class="admin-row"><img src="<?= TVC_BASE_PATH ?>/<?= e($image['image'] ?? '') ?>" alt="<?= e($image['caption'] ?? '') ?>"><div><strong><?= e($image['caption'] ?? 'Untitled image') ?></strong><small><?= e($image['category'] ?? '') ?></small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=gallery&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Remove this image?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?></div></section><section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT MEDIA' : 'ADD MEDIA' ?></p><h2>Choose an image.</h2><form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?><div class="admin-fields"><label class="full"><span>Existing image</span><select name="image"><option value="">Select an image</option><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($item['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Or upload new image</span><input name="image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif"></label><label><span>Caption</span><input name="caption" value="<?= e($item['caption'] ?? '') ?>"></label><label><span>Category</span><input name="category" value="<?= e($item['category'] ?? 'Weddings') ?>"></label><label><span><input type="checkbox" name="featured" <?= !empty($item['featured']) ? 'checked' : '' ?>> Featured</span></label><label><span><input type="checkbox" name="active" <?= !isset($item['active']) || $item['active'] ? 'checked' : '' ?>> Visible</span></label></div><div class="admin-actions"><button class="button button-dark" type="submit">Save image <span>↗</span></button><a class="button" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=gallery">Clear</a></div></form></section></div>
    <?php if ($section === 'gallery'): ?><script>
        document.addEventListener('DOMContentLoaded', () => {
            const list = document.querySelector('.gallery-category-card + .admin-grid .admin-list');
            const editForm = document.querySelector('.gallery-category-card + .admin-grid .admin-card form.admin-form');
            const categoryInput = editForm?.querySelector('input[name="category"]');
            if (categoryInput) {
                const select = document.createElement('select');
                select.name = 'category';
                <?= json_encode(array_values($galleryCategories), JSON_UNESCAPED_SLASHES) ?>.forEach((category) => {
                    const option = new Option(category, category, category === categoryInput.value, category === categoryInput.value);
                    select.add(option);
                });
                categoryInput.replaceWith(select);
            }
            if (!list) return;
            const rows = [...list.querySelectorAll('.admin-row')];
            const form = document.createElement('form');
            form.method = 'post';
            form.className = 'gallery-bulk-delete';
            form.innerHTML = '<input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="bulk-delete"><button class="danger" type="submit">Delete selected images</button>';
            rows.forEach((row) => {
                const index = row.querySelector('a[href*="edit="]')?.href.match(/edit=(\d+)/)?.[1];
                if (index === undefined) return;
                const label = document.createElement('label');
                label.className = 'gallery-select';
                label.innerHTML = `<input type="checkbox" name="image_indexes[]" value="${index}"><span>Select</span>`;
                row.prepend(label);
            });
            list.parentElement.insertBefore(form, list);
            form.addEventListener('submit', (event) => { if (!form.querySelector('input[type="checkbox"]:checked')) { event.preventDefault(); alert('Select at least one image.'); } else if (!confirm('Delete the selected images?')) event.preventDefault(); });
        });
    </script><?php endif; ?>
    <?php elseif ($section === 'package'): ?>
        <section class="admin-card"><p class="eyebrow">12-STEP WIZARD</p><h2>Package steps</h2><div class="admin-stat-grid">
            <?php foreach ($packageSteps as $index => $step): ?><a class="admin-stat <?= $index === $packageStepIndex ? 'is-active' : '' ?>" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=package&amp;step=<?= $index ?>"><strong><?= (int) $step['number'] ?></strong><span><?= e($step['title']) ?></span></a><?php endforeach; ?>
        </div></section>
        <?php $activeStep = $packageSteps[$packageStepIndex]; ?>
        <div class="admin-grid"><section class="admin-card"><p class="eyebrow">STEP <?= (int) $activeStep['number'] ?></p><h2><?= e($activeStep['title']) ?></h2><form class="admin-form" method="post"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save-step"><input type="hidden" name="step" value="<?= $packageStepIndex ?>"><div class="admin-fields"><label class="full"><span>Step name</span><input name="step_title" value="<?= e($activeStep['title']) ?>" required></label><label class="full"><span>Step subtitle</span><textarea name="step_subtitle" rows="3"><?= e($activeStep['subtitle']) ?></textarea></label></div><div class="admin-actions"><button class="button button-dark" type="submit">Save step <span>↗</span></button></div></form></section>
        <section class="admin-card"><p class="eyebrow">OPTIONS</p><h2>Manage cards</h2><div class="admin-list"><?php foreach ($packageOptions as $index => $option): ?><div class="admin-row"><img src="<?= TVC_BASE_PATH ?>/<?= e($option['image'] ?? 'images/cameras/Candid Photo.webp') ?>" alt=""><div><strong><?= e($option['name']) ?></strong><small>₹<?= number_format((float) ($option['price'] ?? 0)) ?></small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=package&amp;step=<?= $packageStepIndex ?>&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this package option?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="step" value="<?= $packageStepIndex ?>"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?></div>
        <form class="admin-form" method="post" enctype="multipart/form-data"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save-option"><input type="hidden" name="step" value="<?= $packageStepIndex ?>"><?php if ($packageEditing !== null): ?><input type="hidden" name="index" value="<?= $editIndex ?>"><?php endif; ?><div class="admin-fields"><label><span>Name</span><input name="name" value="<?= e($packageEditing['name'] ?? '') ?>" required></label><label><span>Price (INR)</span><input name="price" type="number" min="0" step="500" value="<?= e((string) ($packageEditing['price'] ?? 0)) ?>"></label><label class="full"><span>Description</span><textarea name="description" rows="2"><?= e($packageEditing['description'] ?? '') ?></textarea></label><label class="full"><span>Image</span><select name="image"><option value="">Select image</option><?php foreach ($media as $path): ?><option value="<?= e($path) ?>" <?= ($packageEditing['image'] ?? '') === $path ? 'selected' : '' ?>><?= e($path) ?></option><?php endforeach; ?></select></label><label class="full"><span>Or upload image</span><input name="image_upload" type="file" accept=".jpg,.jpeg,.png,.webp,.gif,.avif"></label></div><div class="admin-actions"><button class="button button-dark" type="submit"><?= $packageEditing !== null ? 'Update option' : 'Add option' ?> <span>↗</span></button></div></form></section></div>
    <?php elseif ($section === 'quotes'): ?>
        <div class="admin-stat-grid"><?php foreach (['photography_types' => 'Types', 'coverage' => 'Coverage', 'events' => 'Events', 'add_ons' => 'Add-ons'] as $group => $label): ?><a class="admin-stat" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=quotes&amp;group=<?= e($group) ?>"><strong><?= count($data['quote_options'][$group] ?? []) ?></strong><span><?= e($label) ?></span></a><?php endforeach; ?></div>
        <?php $items = $data['quote_options'][$editGroup] ?? []; $item = is_array($editing) ? $editing : []; ?>
        <div class="admin-grid"><section class="admin-card"><p class="eyebrow"><?= e(ucwords(str_replace('_', ' ', $editGroup))) ?></p><h2>Quote options</h2><div class="admin-list"><?php foreach ($items as $index => $option): ?><div class="admin-row"><div></div><div><strong><?= e($option['name'] ?? '') ?></strong><small><?= e($option['description'] ?? '') ?> · ₹<?= number_format((float) ($option['price'] ?? 0)) ?></small></div><div class="admin-row-actions"><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=quotes&amp;group=<?= e($editGroup) ?>&amp;edit=<?= $index ?>">Edit</a><form method="post" onsubmit="return confirm('Delete this quote option?')"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="delete"><input type="hidden" name="group" value="<?= e($editGroup) ?>"><input type="hidden" name="index" value="<?= $index ?>"><button class="danger" type="submit">Delete</button></form></div></div><?php endforeach; ?></div></section><section class="admin-card"><p class="eyebrow"><?= $editing ? 'EDIT OPTION' : 'NEW OPTION' ?></p><h2>Price the experience.</h2><form class="admin-form" method="post"><input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>"><input type="hidden" name="action" value="save"><input type="hidden" name="group" value="<?= e($editGroup) ?>"><?php if ($editing): ?><input type="hidden" name="index" value="<?= (int) $editIndex ?>"><?php endif; ?><div class="admin-fields"><label class="full"><span>Name</span><input name="name" value="<?= e($item['name'] ?? '') ?>" required></label><label class="full"><span>Description</span><textarea name="description"><?= e($item['description'] ?? '') ?></textarea></label><label><span>Price (INR)</span><input name="price" type="number" min="0" step="500" value="<?= e((string) ($item['price'] ?? 0)) ?>"></label></div><div class="admin-actions"><button class="button button-dark" type="submit">Save option <span>↗</span></button></div></form></section></div>
    <?php elseif ($section === 'leads'): ?>
        <?php $contactLeads = array_values(array_filter($leads, fn (array $lead): bool => ($lead['type'] ?? '') === 'contact')); $quoteLeads = array_values(array_filter($leads, fn (array $lead): bool => ($lead['type'] ?? '') === 'quote')); ?>
        <?php if ($viewLead): ?>
            <section class="admin-card">
                <p class="eyebrow">LEAD DETAILS</p>
                <h2><?= e(($viewLead['payload']['name'] ?? '') ?: 'Lead details') ?></h2>
                <div class="admin-fields">
                    <?php foreach (($viewLead['payload'] ?? []) as $key => $value): ?>
                        <?php if (is_array($value)) { $value = implode(', ', array_map(static fn ($item): string => is_array($item) ? ($item['name'] ?? json_encode($item)) : (string) $item, $value)); } ?>
                        <?php if ($key === 'items' && is_array($value)) { $value = implode(', ', array_map(static fn (array $item): string => (string) ($item['name'] ?? ''), $value)); } ?>
                        <label class="full"><span><?= e(ucwords(str_replace('_', ' ', (string) $key))) ?></span><textarea readonly><?= e((string) $value) ?></textarea></label>
                    <?php endforeach; ?>
                </div>
                <div class="admin-actions">
                    <form method="post" style="display:inline-block">
                        <input type="hidden" name="csrf" value="<?= e(csrf_token()) ?>">
                        <input type="hidden" name="action" value="status">
                        <input type="hidden" name="index" value="<?= (int) array_search($viewLead, $leads, true) ?>">
                        <select name="status">
                            <?php foreach (['New', 'Contacted', 'Converted', 'Closed'] as $status): ?>
                                <option value="<?= e($status) ?>" <?= (($viewLead['status'] ?? 'New') === $status) ? 'selected' : '' ?>><?= e($status) ?></option>
                            <?php endforeach; ?>
                        </select>
                        <button class="button button-dark" type="submit">Update status <span>↗</span></button>
                    </form>
                    <a class="button" href="<?= TVC_BASE_PATH ?>/admin/content.php?section=leads">Back to list</a>
                </div>
            </section>
        <?php endif; ?>
        <section class="admin-card"><p class="eyebrow">INBOX</p><h2>Contact leads</h2><div class="admin-table-wrap"><table class="admin-table"><thead><tr><th>Person</th><th>Details</th><th>Message</th><th>Status</th><th></th></tr></thead><tbody><?php foreach ($contactLeads as $lead): $payload = $lead['payload'] ?? []; ?><tr><td><strong><?= e($payload['name'] ?? '') ?></strong><br><?= e($payload['email'] ?? '') ?></td><td><?= e($payload['phone'] ?? '') ?><br><?= e($payload['location'] ?? '') ?><br><?= e($payload['event_date'] ?? '') ?></td><td><?= e($payload['message'] ?? '') ?></td><td><?= e($lead['status'] ?? 'New') ?></td><td><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=leads&amp;view=<?= rawurlencode((string) ($lead['id'] ?? '')) ?>">View</a></td></tr><?php endforeach; ?><?php if (!$contactLeads): ?><tr><td colspan="5">No contact leads yet.</td></tr><?php endif; ?></tbody></table></div></section>
        <section class="admin-card"><p class="eyebrow">COLLECTION REQUESTS</p><h2>Quote leads</h2><div class="admin-table-wrap"><table class="admin-table"><thead><tr><th>Person</th><th>Event</th><th>Selection</th><th>Status</th><th></th></tr></thead><tbody><?php foreach ($quoteLeads as $lead): $payload = $lead['payload'] ?? []; ?><tr><td><strong><?= e($payload['name'] ?? '') ?></strong><br><?= e($payload['email'] ?? '') ?><br><?= e($payload['phone'] ?? '') ?></td><td><?= e($payload['event_date'] ?? '') ?><br><?= e($payload['location'] ?? '') ?></td><td><?= e(implode(', ', array_map(fn (array $item): string => (string) ($item['name'] ?? ''), $payload['items'] ?? []))) ?><br><strong>₹<?= number_format((float) ($payload['total'] ?? 0)) ?></strong></td><td><?= e($lead['status'] ?? 'New') ?></td><td><a href="<?= TVC_BASE_PATH ?>/admin/content.php?section=leads&amp;view=<?= rawurlencode((string) ($lead['id'] ?? '')) ?>">View</a></td></tr><?php endforeach; ?><?php if (!$quoteLeads): ?><tr><td colspan="5">No quote requests yet.</td></tr><?php endif; ?></tbody></table></div></section>
        <p class="admin-help">Local fallback leads can be managed from the dashboard export once a database is connected. MySQL leads use prepared statements and are shown here automatically.</p>
    <?php endif; ?>
</main>
<script>
    document.addEventListener('DOMContentLoaded', () => {
        const forms = [...document.querySelectorAll('form')].filter((form) => {
            const action = form.querySelector('input[name="action"]')?.value;
            return ['save', 'save-step', 'save-option'].includes(action) && form.querySelector('button[type="submit"]');
        });
        forms.forEach((form, index) => {
            const original = form.querySelector('button[type="submit"]');
            const id = form.id || `admin-save-form-${index}`;
            form.id = id;
            const dock = document.createElement('div');
            dock.className = 'admin-save-dock';
            const button = original.cloneNode(true);
            button.removeAttribute('form');
            button.type = 'submit';
            button.setAttribute('form', id);
            dock.append(button);
            document.body.append(dock);
        });

        const faqList = document.querySelector('.founder-faq-admin-list');
        const addFaqButton = document.querySelector('.admin-faq-add');
        if (faqList && addFaqButton) {
            const addFaqRow = () => {
                const row = document.createElement('div');
                row.className = 'founder-faq-admin-row';
                row.innerHTML = '<label><span>Question</span><input name="founder_faq_question[]"></label><label><span>Answer</span><textarea name="founder_faq_answer[]"></textarea></label><button class="admin-faq-remove" type="button">Remove FAQ</button>';
                faqList.append(row);
            };
            addFaqButton.addEventListener('click', addFaqRow);
            faqList.addEventListener('click', (event) => {
                if (event.target.closest('.admin-faq-remove')) event.target.closest('.founder-faq-admin-row').remove();
            });
        }
    });
</script>
</body>
</html>
