<?php
require_once dirname(__DIR__) . '/app/Core/bootstrap.php';

// 解析当前请求的路径
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = array_values(array_filter(explode('/', trim($path, '/'))));

// /tongji.js 是全局统一的统计代码文件，不属于任何具体站点，独立于站点路由之外处理
if ($path === '/tongji.js') {
    http_response_code(200);
    header('Content-Type: application/javascript; charset=utf-8');
    try {
        $db = Database::getConnection();
        $stmt = $db->query("SELECT head_snippet FROM plugin_settings WHERE plugin_name = 'site_wide_snippet'");
        $row = $stmt->fetch();
        echo $row['head_snippet'] ?? '';
    } catch (Throwable $e) {
        error_log('tongji.js输出失败: ' . $e->getMessage());
    }
    exit;
}

// 检查当前域名是否绑定了某个站点（不管路径是什么，都先查一次，供后面判断用）
$domainSite = Site::findByDomain($_SERVER['HTTP_HOST'] ?? '');
$isCleanUrlMode = false;
$siteId = null;
$routeMode = null; // 'home' / 'category' / 'article'
$routeParam = null;
if ($domainSite && (empty($segments) || $segments[0] !== 'site')) {
    // 域名直连模式：干净路径，不需要 /site/{id} 前缀
    $siteId = (int)$domainSite['id'];
    $isCleanUrlMode = true;
    if (empty($segments)) {
        $routeMode = 'home';
    } elseif (count($segments) === 3 && $segments[1] === 'article' && ctype_digit($segments[2])) {
        // 嵌套格式：/{栏目slug}/article/{数字ID}，栏目slug仅用于展示，实际查找只认文章ID
        $routeMode = 'article';
        $routeParam = (int)$segments[2];
    } elseif ($segments[0] === 'article' && isset($segments[1]) && ctype_digit($segments[1])) {
        // 扁平格式兜底：/article/{数字ID}
        $routeMode = 'article';
        $routeParam = (int)$segments[1];
    } elseif (count($segments) === 1 && in_array($segments[0], ['privacy', 'terms', 'sitemap'], true)) {
        $routeMode = $segments[0];
    } elseif (count($segments) === 1 && $segments[0] === 'search') {
        $routeMode = 'search';
    } elseif (count($segments) === 1 && $segments[0] === 'about') {
        $routeMode = 'about';
    } elseif (count($segments) === 1 && $segments[0] === 'contact') {
        $routeMode = 'contact';
    } elseif (count($segments) === 2 && $segments[0] === 'tag') {
        $routeMode = 'tag';
        $routeParam = rawurldecode($segments[1]);
    } elseif (count($segments) === 2 && $segments[0] === 'topic') {
        $routeMode = 'topic';
        $routeParam = rawurldecode($segments[1]);
    } elseif (count($segments) === 1) {
        // 单段路径，直接当作栏目的拼音slug
        $routeMode = 'category';
        $routeParam = $segments[0];
    }
} elseif (!empty($segments) && $segments[0] === 'site' && isset($segments[1]) && ctype_digit($segments[1])) {
    // 传统模式：/site/{id}/...，任何域名/IP都可以访问，主要给后台预览等内部用途使用
    $siteId = (int)$segments[1];
    if (count($segments) === 2) {
        $routeMode = 'home';
    } elseif (count($segments) === 4 && $segments[2] === 'category') {
        $routeMode = 'category';
        $routeParam = $segments[3];
    } elseif (count($segments) === 4 && $segments[2] === 'article') {
        $routeMode = 'article';
        $routeParam = (int)$segments[3];
    } elseif (count($segments) === 3 && $segments[2] === 'search') {
        $routeMode = 'search';
    } elseif (count($segments) === 3 && $segments[2] === 'about') {
        $routeMode = 'about';
    } elseif (count($segments) === 3 && $segments[2] === 'contact') {
        $routeMode = 'contact';
    } elseif (count($segments) === 4 && $segments[2] === 'tag') {
        $routeMode = 'tag';
        $routeParam = rawurldecode($segments[3]);
    } elseif (count($segments) === 4 && $segments[2] === 'topic') {
        $routeMode = 'topic';
        $routeParam = rawurldecode($segments[3]);
    }
}

if ($siteId === null || $routeMode === null) {
    http_response_code(404);
    die('页面不存在');
}

$site = Site::findById($siteId);
if (!$site || $site['status'] !== 'active') {
    http_response_code(404);
    die('网站不存在或未激活');
}
VisitorLogger::log();

$templateRow = null;
if ($site['template_id']) {
    $db = Database::getConnection();
    $stmt = $db->prepare('SELECT * FROM templates WHERE id = ?');
    $stmt->execute([$site['template_id']]);
    $templateRow = $stmt->fetch();
}
$templateCode = $templateRow['code'] ?? 'default';
$theme = Theme::getTokens($site['theme_code'] ?? 'blue');

if ($routeMode === 'home') {
    $categories = Category::findBySite($siteId);
    foreach ($categories as &$cat) {
        $cat['articles'] = Article::findPublishedByCategory($cat['id'], 2);
    }
    unset($cat);
    TemplateEngine::render($templateCode, 'index', [
        'site' => $site,
        'categories' => $categories,
        'theme' => $theme,
        'isCleanUrlMode' => $isCleanUrlMode,
    ]);
    exit;
}

if ($routeMode === 'category') {
    $category = Category::findBySlug($siteId, $routeParam);
    if (!$category) {
        http_response_code(404);
        die('栏目不存在');
    }
    $allCategories = Category::findBySite($siteId);
    $articles = Article::findPublishedByCategory($category['id'], 50);
    TemplateEngine::render($templateCode, 'category', [
        'site' => $site,
        'category' => $category,
        'allCategories' => $allCategories,
        'articles' => $articles,
        'theme' => $theme,
        'isCleanUrlMode' => $isCleanUrlMode,
    ]);
    exit;
}

if ($routeMode === 'article') {
    $article = Article::findPublishedById($siteId, $routeParam);
    if (!$article) {
        http_response_code(404);
        die('文章不存在');
    }
    $category = Category::findById($article['category_id']);
    $allCategories = Category::findBySite($siteId);
    $relatedArticles = RelatedArticlesService::getRelated((int)$article['id'], $siteId, (int)$article['category_id'], $article['content_type'] ?? '', 6);
    TemplateEngine::render($templateCode, 'article', [
        'site' => $site,
        'category' => $category,
        'allCategories' => $allCategories,
        'article' => $article,
        'relatedArticles' => $relatedArticles,
        'theme' => $theme,
        'isCleanUrlMode' => $isCleanUrlMode,
    ]);
    exit;
}

if (in_array($routeMode, ['privacy', 'terms', 'sitemap'], true)) {
    $allCategories = Category::findBySite($siteId);
    $isSitemap = false;
    if ($routeMode === 'sitemap') {
        $isSitemap = true;
        $pageTitle = '网站地图';
        foreach ($allCategories as &$navCat) {
            $navCat['articles'] = Article::findPublishedByCategory($navCat['id'], 50);
        }
        unset($navCat);
        $pageContent = '';
    } elseif ($routeMode === 'privacy') {
        $pageTitle = '隐私政策';
        $pageContent = !empty($site["privacy_content"]) ? $site["privacy_content"] : "本页面内容由网站管理员在后台自行编辑填写，用于说明本网站如何收集、使用、存储和保护访客的个人信息。\n\n（管理员尚未填写具体内容，此处为默认占位文本。）";
    } else {
        $pageTitle = '用户协议';
        $pageContent = !empty($site["terms_content"]) ? $site["terms_content"] : "本页面内容由网站管理员在后台自行编辑填写，用于说明访客使用本网站服务时需要遵守的条款和条件。\n\n（管理员尚未填写具体内容，此处为默认占位文本。）";
    }
    TemplateEngine::render('_shared', 'static_page', [
        'site' => $site,
        'allCategories' => $allCategories,
        'pageTitle' => $pageTitle,
        'pageContent' => $pageContent,
        'isSitemap' => $isSitemap,
        'theme' => $theme,
        'isCleanUrlMode' => $isCleanUrlMode,
    ]);
    exit;
}

if (in_array($routeMode, ['search', 'tag', 'topic', 'about', 'contact'], true)) {
    // 这几种页面类型目前只有 modular 架构实现了，其余旧模板尚未支持，
    // 若目标模板缺少对应视图文件，优雅降级为404，而不是让 TemplateEngine 直接500崩溃
    $viewFile = APP_ROOT . "/templates/{$templateCode}/{$routeMode}.php";
    if (!file_exists($viewFile)) {
        http_response_code(404);
        die('该页面类型暂未在当前模板中提供');
    }

    $categories = Category::findBySite($siteId);

    if ($routeMode === 'search') {
        $keyword = trim((string)($_GET['q'] ?? ''));
        $articles = $keyword !== '' ? Article::searchPublished($siteId, $keyword, 30) : [];
        TemplateEngine::render($templateCode, 'search', [
            'site' => $site,
            'categories' => $categories,
            'keyword' => $keyword,
            'articles' => $articles,
            'theme' => $theme,
            'isCleanUrlMode' => $isCleanUrlMode,
        ]);
        exit;
    }

    if ($routeMode === 'tag') {
        $tagSlug = (string)$routeParam;
        $tagRecord = Tag::findBySlug($siteId, $tagSlug);
        if (!$tagRecord) {
            http_response_code(404);
            die('标签不存在');
        }
        $articles = Article::findPublishedByTag($siteId, $tagSlug, 30);
        TemplateEngine::render($templateCode, 'tag', [
            'site' => $site,
            'categories' => $categories,
            'tag' => $tagRecord,
            'articles' => $articles,
            'theme' => $theme,
            'isCleanUrlMode' => $isCleanUrlMode,
        ]);
        exit;
    }

    if ($routeMode === 'topic') {
        $topicSlug = (string)$routeParam;
        $topicRecord = Topic::findBySlug($siteId, $topicSlug);
        if (!$topicRecord) {
            http_response_code(404);
            die('专题不存在');
        }
        $flatArticles = Topic::findArticlesByTopicId((int)$topicRecord['id']);
        $articlesByCategory = Topic::groupArticlesByCategory($flatArticles);
        TemplateEngine::render($templateCode, 'topic', [
            'site' => $site,
            'categories' => $categories,
            'topic' => $topicRecord,
            'articlesByCategory' => $articlesByCategory,
            'theme' => $theme,
            'isCleanUrlMode' => $isCleanUrlMode,
        ]);
        exit;
    }
    if ($routeMode === 'about') {
        TemplateEngine::render($templateCode, 'about', [
            'site' => $site,
            'categories' => $categories,
            'theme' => $theme,
            'isCleanUrlMode' => $isCleanUrlMode,
        ]);
        exit;
    }

    if ($routeMode === 'contact') {
        TemplateEngine::render($templateCode, 'contact', [
            'site' => $site,
            'categories' => $categories,
            'theme' => $theme,
            'isCleanUrlMode' => $isCleanUrlMode,
        ]);
        exit;
    }
}

http_response_code(404);
die('页面不存在');
