<?php
/**
 * 入口文件 —— 放到站点根目录
 * ---------------------------------------------------------------------------
 * 做什么：
 *   1. 读后台配置（data/settings.json）
 *   2. 判断访客 IP 是否命中白名单 → 命中就 302 到该规则组的目标域名
 *   3. 没命中 / 总开关关闭 → 把站点原本的内容照原样输出（不跳转）
 *   4. 顺手记一条访问日志（data/logs/日期.log）—— 谁来的、哪个地区、
 *      被分到哪一面、用什么终端。日志开关关掉时这一步完全跳过。
 *
 * 总开关关闭时它不做事，站点行为跟没装一样（日志记录不受总开关影响，见下）。
 *
 * 注意：如果你站点根目录原本就有 index.php（比如 WordPress、ThinkPHP），
 * 不要直接覆盖它 —— 见 README 的「已有 index.php 怎么办」。
 */

require __DIR__ . '/lib/IpMatcher.php';
require __DIR__ . '/lib/Store.php';
require __DIR__ . '/lib/Router.php';
require __DIR__ . '/lib/Serve.php';
require __DIR__ . '/lib/VisitLog.php';   // ← 访问日志（记录 + 后台统计）

/**
 * 配置目录位置。
 *
 * 默认与入口文件同级（data/）。**如果你的主机允许，强烈建议改成 Web 根目录
 * 之外的位置** —— 那样即使 Web 服务器没配好，配置和密码哈希也下载不到：
 *
 *   define('GEO_ROUTER_DATA', '/home/youruser/geo-router-data');
 */
if (!defined('GEO_ROUTER_DATA')) {
    define('GEO_ROUTER_DATA', __DIR__ . '/data');
}

$dataDir = GEO_ROUTER_DATA;

$store    = new Store($dataDir);
$settings = $store->load();

// 访问日志。日志目录跟着数据目录走（data/logs/），所以放到 Web 根目录之外
// 的话日志也一起搬走了。
//
// 日志刻意**不受总开关影响**：暂停分流的那段时间，访问量一样看得到，
// 只是这些记录都会标成「未分流」。
$logger = new VisitLog($dataDir, $settings);

if (!empty($settings['enabled'])) {
    $router = new Router($settings, $store->compiled(), $dataDir);

    $decision = $router->decide($_SERVER);

    if ($decision['action'] === 'redirect') {
        // 先记账再跳：跳转之后这个请求就结束了，没机会再写
        $logger->logVisit($_SERVER, $decision);
        $router->emit($decision['url'], $_SERVER, $decision['country']);
        exit; // 已经发出 302
    }

    $logger->logVisit($_SERVER, $decision);
} else {
    $logger->logVisit($_SERVER, null);   // 记为「未分流」
}

// 放行：把原站内容原样输出
geo_router_serve(
    __DIR__,
    isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '/',
    __FILE__
);
