<?php
/**
 * 前台入口 / 路由控制器
 * 通过 ?p= 参数路由到对应视图
 */
require_once __DIR__ . '/config.php';

$p = isset($_GET['p']) ? $_GET['p'] : 'home';
$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
$key = isset($_GET['key']) ? $_GET['key'] : '';
$page = isset($_GET['page']) ? max(1, (int)$_GET['page']) : 1;

$db = Database::getInstance();
$siteName = setting('site_name', '水保企业官网');
$siteSlogan = setting('site_slogan', '守护绿水青山');
$menus = get_menus();

// 默认 SEO
$seoTitle = setting('site_name');
$seoKeywords = setting('site_keywords');
$seoDescription = setting('site_description');

$view = null;
$viewData = compact('p', 'id', 'key', 'page', 'db', 'menus', 'siteName', 'siteSlogan');

switch ($p) {
    case 'home':
    case '':
        $view = 'home';
        break;

    case 'page':
        $pg = $db->queryOne("SELECT * FROM pages WHERE `key` = :k LIMIT 1", [':k' => $key]);
        if (!$pg) {
            http_response_code(404);
            $view = '404';
            break;
        }
        $viewData['pg'] = $pg;
        $seoTitle = $pg['seo_title'] ?: $pg['title'] . ' - ' . $siteName;
        $seoDescription = $pg['seo_description'];
        $view = 'page';
        break;

    case 'news':
        $where = "WHERE is_published=1";
        $total = (int)$db->queryScalar("SELECT COUNT(*) FROM news {$where}");
        $pageSize = 9;
        $list = $db->query("SELECT * FROM news {$where} ORDER BY published_at DESC, id DESC" . $db->limitClause($page, $pageSize));
        $viewData['list'] = $list;
        $viewData['total'] = $total;
        $viewData['pageSize'] = $pageSize;
        $seoTitle = '新闻动态 - ' . $siteName;
        $view = 'news_list';
        break;

    case 'news_detail':
        $item = $db->queryOne("SELECT * FROM news WHERE id = :id AND is_published=1 LIMIT 1", [':id' => $id]);
        if (!$item) {
            http_response_code(404);
            $view = '404';
            break;
        }
        $db->execute("UPDATE news SET views = views + 1 WHERE id = :id", [':id' => $id]);
        $viewData['item'] = $item;
        $viewData['prev'] = $db->queryOne("SELECT id,title FROM news WHERE is_published=1 AND id < :id ORDER BY id DESC LIMIT 1", [':id' => $id]);
        $viewData['next'] = $db->queryOne("SELECT id,title FROM news WHERE is_published=1 AND id > :id ORDER BY id ASC LIMIT 1", [':id' => $id]);
        $viewData['related'] = $db->query("SELECT id,title,published_at,cover_image FROM news WHERE is_published=1 AND id <> :id ORDER BY published_at DESC LIMIT 5", [':id' => $id]);
        $seoTitle = $item['title'] . ' - ' . $siteName;
        $seoDescription = truncate($item['summary'], 150, '');
        $view = 'news_detail';
        break;

    case 'cases':
        $where = "WHERE is_published=1";
        $total = (int)$db->queryScalar("SELECT COUNT(*) FROM cases {$where}");
        $pageSize = 9;
        $list = $db->query("SELECT * FROM cases {$where} ORDER BY sort_order ASC, id DESC" . $db->limitClause($page, $pageSize));
        $viewData['list'] = $list;
        $viewData['total'] = $total;
        $viewData['pageSize'] = $pageSize;
        $seoTitle = '工程案例 - ' . $siteName;
        $view = 'cases_list';
        break;

    case 'case_detail':
        $item = $db->queryOne("SELECT * FROM cases WHERE id = :id AND is_published=1 LIMIT 1", [':id' => $id]);
        if (!$item) {
            http_response_code(404);
            $view = '404';
            break;
        }
        $viewData['item'] = $item;
        $viewData['related'] = $db->query("SELECT id,title,cover_image,location FROM cases WHERE is_published=1 AND id <> :id ORDER BY sort_order ASC LIMIT 4", [':id' => $id]);
        $seoTitle = $item['title'] . ' - ' . $siteName;
        $seoDescription = truncate($item['summary'], 150, '');
        $view = 'case_detail';
        break;

    case 'contact':
        $pg = $db->queryOne("SELECT * FROM pages WHERE `key` = 'contact' LIMIT 1");
        $viewData['pg'] = $pg;
        $seoTitle = '联系我们 - ' . $siteName;
        $view = 'contact';
        break;

    case 'search':
        $q = isset($_GET['q']) ? trim($_GET['q']) : '';
        $viewData['q'] = $q;
        if ($q !== '') {
            $kw = '%' . $q . '%';
            $viewData['newsResults'] = $db->query("SELECT id,title,summary,published_at FROM news WHERE is_published=1 AND (title LIKE :q OR summary LIKE :q) ORDER BY published_at DESC LIMIT 20", [':q' => $kw]);
            $viewData['caseResults'] = $db->query("SELECT id,title,summary,location FROM cases WHERE is_published=1 AND (title LIKE :q OR summary LIKE :q) ORDER BY id DESC LIMIT 20", [':q' => $kw]);
        }
        $seoTitle = '搜索：' . $q . ' - ' . $siteName;
        $view = 'search';
        break;

    default:
        http_response_code(404);
        $view = '404';
}

$viewData['seoTitle'] = $seoTitle;
$viewData['seoKeywords'] = $seoKeywords;
$viewData['seoDescription'] = $seoDescription;

// 当前激活菜单标识（用于高亮）
$viewData['active'] = $p;
if ($p === 'page' && $key === 'about') $viewData['active'] = 'about';
if ($p === 'page' && $key === 'service') $viewData['active'] = 'service';

extract($viewData);

require INCLUDE_PATH . '/header.php';
require VIEW_PATH . '/' . $view . '.php';
require INCLUDE_PATH . '/footer.php';
