<?php
/**
 * Shared <head> partial.
 *
 * Variables consumed (all optional):
 * - $pageTitle, $pageDescription, $pageKeywords
 * - $pageUrl, $pageImage
 * - $robotsMeta, $googlebotMeta
 * - $htmlClass        -- classes for <html> element (default: 'h-full')
 * - $bodyClass        -- consumed in body partial, declared here for clarity
 * - $extraHeadLinks   -- raw HTML inserted just before </head> (e.g. RSS/Atom <link>s)
 * - $extraJsonLd      -- raw HTML for additional <script type="application/ld+json"> blocks
 * - $includeAuthValidation -- bool, include auth-validation.js (default: true)
 */
$pageTitle = $pageTitle ?? Lang::get('app_name');
$pageDescription = $pageDescription ?? 'Professional coins and banknotes catalogue for managing your currency collection.';
$pageKeywords = $pageKeywords ?? 'numismatic, numismatics, coins, banknotes, banknotes catalogue, currency collection, collections, catalogues, personal catalogue, banknote catalogue, coin catalogue, notaphily, coin collecting, banknote collecting, collection management, digital catalog, ' . Lang::get('app_name');
$pageUrl = $pageUrl ?? APP_URL . $_SERVER['REQUEST_URI'];
$robotsMeta = $robotsMeta ?? 'index, follow';
$googlebotMeta = $googlebotMeta ?? $robotsMeta;
$htmlClass = $htmlClass ?? 'h-full';
$extraHeadLinks = $extraHeadLinks ?? '';
$extraJsonLd = $extraJsonLd ?? '';
$includeAuthValidation = $includeAuthValidation ?? true;

// Ensure canonical URLs don't have trailing slashes for consistency
if (preg_match('/^(.+)\/$/', $pageUrl) && !in_array(parse_url($pageUrl, PHP_URL_PATH), ['/'])) {
    $pageUrl = rtrim($pageUrl, '/');
}
$pageImage = $pageImage ?? DEFAULT_OG_IMAGE;
?>
<!DOCTYPE html>
<html lang="<?= htmlspecialchars(Lang::getHtmlLocale()) ?>" class="<?= htmlspecialchars($htmlClass) ?>">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
    // Apply dark mode synchronously before paint to prevent flicker / NO_LCP
    (function(){try{var t=localStorage.getItem('theme');var d=t==='dark'||(t!=='light'&&window.matchMedia('(prefers-color-scheme: dark)').matches);if(d)document.documentElement.classList.add('dark');}catch(e){}})();
    </script>
    <meta name="csrf-token" content="<?= Session::getCsrfToken() ?>">

    <!-- SEO Meta Tags -->
    <title><?= htmlspecialchars($pageTitle) ?></title>
    <meta name="description" content="<?= htmlspecialchars($pageDescription) ?>">
    <meta name="keywords" content="<?= htmlspecialchars($pageKeywords) ?>">
    <meta name="author" content="<?= Lang::get('app_name') ?>">
    <meta name="robots" content="<?= htmlspecialchars($robotsMeta) ?>">
    <meta name="googlebot" content="<?= htmlspecialchars($googlebotMeta) ?>">
    <link rel="canonical" href="<?= htmlspecialchars($pageUrl) ?>">

    <!-- Hreflang Tags for Multilingual SEO -->
    <?php if (ENABLE_HREFLANG): ?>
    <?php
    $currentPath = parse_url($pageUrl, PHP_URL_PATH);
    foreach (Lang::supportedLocales() as $lang):
        $langUrl = $lang === 'en' ? APP_URL . $currentPath : APP_URL . "/lang/$lang" . $currentPath;
        $langUrl = rtrim($langUrl, '/');
    ?>
    <link rel="alternate" hreflang="<?= Lang::hreflangCode($lang) ?>" href="<?= htmlspecialchars($langUrl) ?>">
    <?php endforeach; ?>
    <link rel="alternate" hreflang="x-default" href="<?= htmlspecialchars(APP_URL . $currentPath) ?>">
    <?php endif; ?>

    <!-- Open Graph Meta Tags -->
    <meta property="og:title" content="<?= htmlspecialchars($pageTitle) ?>">
    <meta property="og:description" content="<?= htmlspecialchars($pageDescription) ?>">
    <meta property="og:type" content="website">
    <meta property="og:url" content="<?= htmlspecialchars($pageUrl) ?>">
    <meta property="og:image" content="<?= htmlspecialchars($pageImage) ?>">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:alt" content="<?= htmlspecialchars(Lang::get('app_name')) ?>">
    <meta property="og:site_name" content="<?= htmlspecialchars(Lang::get('app_name')) ?>">
    <meta property="og:locale" content="<?= str_replace('-', '_', Lang::getLocale()) ?>">

    <!-- Twitter Card Meta Tags -->
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="<?= htmlspecialchars($pageTitle) ?>">
    <meta name="twitter:description" content="<?= htmlspecialchars($pageDescription) ?>">
    <meta name="twitter:image" content="<?= htmlspecialchars($pageImage) ?>">
    <meta name="twitter:image:alt" content="<?= htmlspecialchars(Lang::get('app_name')) ?>">

    <!-- Favicon and Icons -->
    <link rel="icon" type="image/x-icon" href="<?= APP_URL ?>/favicon.ico?v=1">
    <link rel="apple-touch-icon" href="<?= APP_URL ?>/favicon.ico?v=1">
    <link rel="manifest" href="<?= APP_URL ?>/site.webmanifest">

    <!-- Accessibility Meta Tags -->
    <meta name="theme-color" content="#2563eb">
    <meta name="msapplication-TileColor" content="#2563eb">

    <!-- CSS Loading (blocking ensures LCP element has proper styles) -->
    <link rel="stylesheet" href="<?= APP_URL ?>/css/tailwind.css">
    <link rel="stylesheet" href="<?= APP_URL ?>/css/app.css">

    <!-- Self-Hosted Font Loading -->
    <link rel="preload" href="<?= APP_URL ?>/fonts/inter-regular.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="preload" href="<?= APP_URL ?>/fonts/inter-bold.woff2" as="font" type="font/woff2" crossorigin>
    <link rel="stylesheet" href="<?= APP_URL ?>/fonts/inter.css">

    <!-- Schema.org Structured Data (global Organization + WebSite) -->
    <?= Schema::render([Schema::organization(), Schema::webSite()]) ?>
    <?= $extraJsonLd ?>

    <?= $extraHeadLinks ?>

    <!-- Optimized JavaScript Loading -->
    <?php if ($includeAuthValidation): ?>
    <script src="<?= APP_URL ?>/js/auth-validation.js" defer></script>
    <?php endif; ?>
    <script src="<?= APP_URL ?>/js/simple-performance.js" defer></script>
    <script>
        window.APP_URL = '<?= APP_URL ?>';
        <?php
        $cookieConsentRaw = Session::get('show_cookie_consent', 'false');
        $showCookieConsent = $cookieConsentRaw === 'true' || $cookieConsentRaw === 1 || $cookieConsentRaw === true;
        ?>
        window.showCookieConsent = <?= $showCookieConsent ? 'true' : 'false' ?>;
        window.defaultTheme = '<?= Session::get('default_theme', 'system') ?>';
    </script>
    <?php if (Session::isLoggedIn()): ?>
    <meta name="csrf-token" content="<?= Session::getCsrfToken() ?>">
    <?php endif; ?>
</head>
