<?php
require_once dirname(__DIR__, 1) . '/inc/site.php';

$wsBase = ws_base_href();
$galleryPageUrl = $wsBase . 'support/gallery.php';

$dataFile = SITE_ROOT . '/assets/data/gallery-drive.json';
$galleryData = is_readable($dataFile) ? json_decode(file_get_contents($dataFile), true) : array();
$brands = isset($galleryData['brands']) && is_array($galleryData['brands']) ? $galleryData['brands'] : array();
$partnerLogos = isset($galleryData['partnerLogos']) && is_array($galleryData['partnerLogos']) ? $galleryData['partnerLogos'] : array();

function gallery_local_images($basePath, $filenames) {
    $images = array();

    foreach ($filenames as $filename) {
        $path = rtrim($basePath, '/') . '/' . $filename;

        if (file_exists(SITE_ROOT . '/' . $path)) {
            $images[] = gallery_normalize_image_entry(array(
                'thumbnail' => $path,
                'full' => $path,
            ));
        }
    }

    return $images;
}

function gallery_json_images($relativePath) {
    $dataFile = SITE_ROOT . '/' . ltrim($relativePath, '/');
    $data = is_readable($dataFile) ? json_decode(file_get_contents($dataFile), true) : array();
    $images = isset($data['images']) && is_array($data['images']) ? $data['images'] : array();

    return array_map('gallery_normalize_image_entry', $images);
}

function gallery_is_local_image_path($path) {
    $path = trim((string) $path);

    return $path !== '' && !preg_match('#^https?://#i', $path);
}

function gallery_drive_file_id(array $image) {
    $thumbnail = trim((string) ($image['thumbnail'] ?? ''));

    // Carsome / Carlist JSON has Drive ids but images live on the server — do not proxy those.
    if (gallery_is_local_image_path($thumbnail)) {
        return '';
    }

    foreach (array('thumbnail', 'full') as $key) {
        if (empty($image[$key])) {
            continue;
        }
        if (preg_match('#drive\.google\.com/thumbnail\?id=([^&]+)#i', (string) $image[$key], $matches)) {
            return $matches[1];
        }
        if (preg_match('#drive\.google\.com/uc\?[^#]*\bid=([^&]+)#i', (string) $image[$key], $matches)) {
            return $matches[1];
        }
    }

    if (!empty($image['id']) && preg_match('/^[a-zA-Z0-9_-]{10,64}$/', (string) $image['id'])) {
        return (string) $image['id'];
    }

    return '';
}

/** Public Google CDN URL for a shared Drive file (works in <img> when file is link-shared). */
function gallery_drive_image_url($fileId, $size = 'w1000') {
    $width = preg_replace('/\D/', '', (string) $size);
    if ($width === '') {
        $width = '1000';
    }

    return 'https://lh3.googleusercontent.com/d/' . rawurlencode($fileId) . '=w' . $width;
}

function gallery_image_url($path) {
    $path = trim((string) $path);

    if ($path === '') {
        return '';
    }

    if (preg_match('#^https?://#i', $path)) {
        return $path;
    }

    $relative = ltrim(str_replace('\\', '/', $path), '/');

    return ws_public_url($relative);
}

function gallery_normalize_image_entry(array $image) {
    $thumbnail = trim((string) ($image['thumbnail'] ?? ''));
    $full = trim((string) ($image['full'] ?? ''));
    if ($full === '') {
        $full = $thumbnail;
    }

    if (gallery_is_local_image_path($thumbnail)) {
        $image['thumbnail'] = gallery_image_url($thumbnail);
        $image['full'] = gallery_image_url($full);

        return $image;
    }

    $driveId = gallery_drive_file_id($image);

    if ($driveId !== '') {
        $image['thumbnail'] = gallery_drive_image_url($driveId, 'w1000');
        $image['full'] = gallery_drive_image_url($driveId, 'w1800');

        return $image;
    }

    foreach (array('thumbnail', 'full') as $key) {
        if (!empty($image[$key])) {
            $image[$key] = gallery_image_url($image[$key]);
        }
    }

    return $image;
}

function gallery_logo_url(array $logo) {
    if (!empty($logo['local'])) {
        return gallery_image_url($logo['local']);
    }

    if (!empty($logo['url'])) {
        return gallery_image_url($logo['url']);
    }

    return '';
}

function gallery_prepare_brands(array $brands) {
    foreach ($brands as $index => $brand) {
        if (!empty($brand['images']) && is_array($brand['images'])) {
            $brands[$index]['images'] = array_map('gallery_normalize_image_entry', $brand['images']);
        }
    }

    return $brands;
}

$partnerImages = gallery_local_images('assets/images/gallery/partners', array(
    '1.jpg', '2.jpg', '3.jpg', '4.jpg', '5.jpg', '6.jpg', '7.jpg', '8.jpg',
    '9.jpg', '10.jpg', '11.jpg', '12.jpg', '13.jpg', '14.jpg', '15.jpg', '16.jpg',
));
$carsomeImages = gallery_json_images('assets/data/carsome-gallery.json');
$carlistImages = gallery_json_images('assets/data/carlist-gallery.json');

$partnerBrands = array(
    array(
        'name' => 'Carsome Certified',
        'slug' => 'carsome-certified',
        'logo' => isset($partnerLogos['carsome']) ? $partnerLogos['carsome'] : array(),
        'images' => !empty($carsomeImages) ? $carsomeImages : $partnerImages,
    ),
    array(
        'name' => 'Carlist Qualified',
        'slug' => 'carlist-qualified',
        'logo' => isset($partnerLogos['carlist']) ? $partnerLogos['carlist'] : array(),
        'images' => !empty($carlistImages) ? $carlistImages : $partnerImages,
    ),
);

$brands = array_merge($partnerBrands, $brands);
$brands = gallery_prepare_brands($brands);

$brands = array_values(array_filter($brands, function ($brand) {
    return !empty($brand['name']) && !empty($brand['slug']) && !empty($brand['images']) && is_array($brand['images']);
}));

$selectedSlug = isset($_GET['brand']) ? strtolower(preg_replace('/[^a-z0-9-]/', '', $_GET['brand'])) : '';
$selectedBrand = null;

foreach ($brands as $brand) {
    if ($selectedSlug === $brand['slug']) {
        $selectedBrand = $brand;
        break;
    }
}

if (!$selectedBrand && count($brands) > 0) {
    $selectedBrand = $brands[0];
    $selectedSlug = $selectedBrand['slug'];
}

function gallery_e($value) {
    return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8');
}

function gallery_initials($name) {
    $clean = trim(str_replace('/', ' ', $name));
    $words = preg_split('/\s+/', $clean);
    $initials = '';

    foreach ($words as $word) {
        if ($word !== '') {
            $initials .= strtoupper(substr($word, 0, 1));
        }

        if (strlen($initials) >= 2) {
            break;
        }
    }

    return $initials !== '' ? $initials : strtoupper(substr($name, 0, 1));
}
?>

<!DOCTYPE html>
<html lang="en-US" prefix="og: http://ogp.me/ns#">

<?php ws_include('inc/head.php'); ?>

<body id="gallery_page" class="page-template page-template-templates page-template-template-full-notitle page-template-templatestemplate-full-notitle-php page responsive layout-full no-js has-menu-search page-layout-default not-default-page mobilenav">

    <?php ws_include('inc/header.php'); ?>

    <main class="smart-gallery-page">
        <div class="container">
            <div class="smart-gallery-layout">
                <aside class="smart-gallery-sidebar" aria-label="Gallery brands">
                    <h1>BRANDS WE'VE BACKED</h1>

                    <nav class="smart-gallery-brand-list" id="smart-gallery-brand-list" aria-label="Gallery categories">
                        <?php foreach ($brands as $brand): ?>
                            <?php $isActive = $brand['slug'] === $selectedSlug; ?>
                            <a class="smart-gallery-brand-link<?php echo $isActive ? ' is-active' : ''; ?>" href="<?php echo gallery_e($galleryPageUrl . '?brand=' . $brand['slug']); ?>">
                                <span class="smart-gallery-brand-mark<?php echo (!empty($brand['logo']['local']) || !empty($brand['logo']['url'])) ? ' smart-gallery-brand-mark-logo' : ''; ?>">
                                    <?php $brandLogoUrl = gallery_logo_url($brand['logo'] ?? array()); ?>
                                    <?php if ($brandLogoUrl !== ''): ?>
                                        <img src="<?php echo gallery_e($brandLogoUrl); ?>" alt="<?php echo gallery_e($brand['name'] . ' logo'); ?>" loading="lazy" decoding="async">
                                    <?php else: ?>
                                        <?php echo gallery_e(gallery_initials($brand['name'])); ?>
                                    <?php endif; ?>
                                </span>
                                <span><?php echo gallery_e($brand['name']); ?></span>
                            </a>
                        <?php endforeach; ?>
                    </nav>
                </aside>

                <section class="smart-gallery-content" aria-labelledby="gallery-title">
                    <?php if ($selectedBrand): ?>
                        <div class="smart-gallery-heading">
                            <h2 id="gallery-title"><?php echo gallery_e($selectedBrand['name']); ?></h2>
                        </div>

                        <div class="smart-gallery-grid">
                            <?php foreach ($selectedBrand['images'] as $image): ?>
                                <button class="smart-gallery-card" type="button" aria-label="View <?php echo gallery_e($selectedBrand['name']); ?> photo">
                                    <img
                                        src="<?php echo gallery_e($image['thumbnail']); ?>"
                                        alt="<?php echo gallery_e($selectedBrand['name'] . ' car photo'); ?>"
                                        class="lightbox-thumb"
                                        data-full="<?php echo gallery_e($image['full']); ?>"
                                        loading="lazy"
                                        decoding="async"
                                    >
                                </button>
                            <?php endforeach; ?>
                        </div>
                    <?php else: ?>
                        <div class="smart-gallery-empty">
                            <h2 id="gallery-title">Gallery coming soon</h2>
                            <p>The gallery is ready for photos once the image folder is available.</p>
                        </div>
                    <?php endif; ?>
                </section>
            </div>
        </div>
    </main>

    <div id="lightbox" class="gallery-lightbox">
        <div id="lightbox-close">&times;</div>
        <img id="lightbox-img" src="" alt="Selected gallery photo" />
    </div>

    <?php ws_include('inc/footer.php'); ?>
    <?php ws_include('inc/scroll-to-top.php'); ?>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.6/dist/js/bootstrap.bundle.min.js" integrity="sha384-j1CDi7MgGQ12Z7Qab0qlWQ/Qqz24Gc6BM0thvEMVjHnfYGF0rmFCozFSxQBxwHKO" crossorigin="anonymous"></script>
    <script src="<?php echo gallery_e($wsBase . 'assets/js/lightbox.js'); ?>"></script>
</body>
</html>
