-- Cloaka 安装程序自动执行的表结构（与 lib/InstallSchema.php 保持一致）
-- 使用 CREATE TABLE IF NOT EXISTS，重复安装不会覆盖已有数据

CREATE TABLE IF NOT EXISTS `cloak_site_domains` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `hostname` varchar(255) NOT NULL COMMENT '站点域名',
  `config_name` varchar(64) NOT NULL DEFAULT '' COMMENT '关联配置名',
  `cf_zone_id` varchar(64) DEFAULT NULL COMMENT 'Cloudflare Zone ID',
  `cf_nameservers` text DEFAULT NULL COMMENT 'Cloudflare NS JSON',
  `cf_status` varchar(32) NOT NULL DEFAULT 'local' COMMENT 'Cloudflare 状态',
  `cf_error` varchar(500) DEFAULT NULL COMMENT '最近错误',
  `cf_checked_at` datetime DEFAULT NULL COMMENT '上次检测时间',
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_hostname` (`hostname`),
  KEY `idx_config_name` (`config_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

CREATE TABLE IF NOT EXISTS `ip_groups` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL COMMENT '组名',
  `type` enum('black','white') NOT NULL COMMENT '类型：black为黑名单，white为白名单',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

CREATE TABLE IF NOT EXISTS `ip_list` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `group_id` int(11) NOT NULL COMMENT '所属组ID',
  `ip_address` varchar(45) NOT NULL COMMENT 'IP地址',
  PRIMARY KEY (`id`),
  KEY `idx_group_ip` (`group_id`,`ip_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

CREATE TABLE IF NOT EXISTS `visitor_logs` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `campagin_id` varchar(20) NOT NULL COMMENT '策略ID',
  `visit_md5_code` char(32) NOT NULL DEFAULT 'loss' COMMENT '客户端标记',
  `domain` varchar(35) NOT NULL COMMENT '域名',
  `visit_date` datetime NOT NULL COMMENT '访问日期',
  `IP` varchar(150) NOT NULL COMMENT 'IP',
  `country` varchar(10) DEFAULT NULL COMMENT '国家',
  `result` char(5) DEFAULT NULL COMMENT '判断结果',
  `reason` varchar(100) DEFAULT NULL COMMENT '判断理由',
  `referer` text DEFAULT NULL COMMENT '来源',
  `vtimes` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '第几次访问',
  `client` varchar(20) DEFAULT NULL COMMENT '客户端',
  `browser` varchar(20) DEFAULT NULL COMMENT '浏览器',
  `device` varchar(300) DEFAULT NULL COMMENT '设备',
  `page` text DEFAULT NULL COMMENT '浏览页面',
  `fp_url` text DEFAULT NULL COMMENT '跳转页面',
  `language` varchar(300) DEFAULT NULL COMMENT '语言',
  `user_agent` text DEFAULT NULL COMMENT 'User-Agent 完整值',
  `http_referer` text DEFAULT NULL COMMENT 'HTTP Referer 完整值',
  `accept_language_raw` text DEFAULT NULL COMMENT 'Accept-Language 完整值',
  `judge_timing` text DEFAULT NULL COMMENT '判定用时 JSON',
  `fp_hdata` text DEFAULT NULL COMMENT '指纹 hdata 解码 JSON',
  `api_by_request` text DEFAULT NULL COMMENT 'byApi 请求参数 JSON',
  `api_by_response` text DEFAULT NULL COMMENT 'byApi 响应 JSON',
  `api_risk_request` text DEFAULT NULL COMMENT 'byApiRisk 请求参数 JSON',
  `api_risk_response` text DEFAULT NULL COMMENT 'byApiRisk 响应 JSON',
  `is_simulation` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否模拟测试',
  `sim_source_log_id` int(11) UNSIGNED DEFAULT NULL COMMENT '模拟重放来源日志 ID',
  `add_time` timestamp NOT NULL DEFAULT current_timestamp() COMMENT '日志记录时间',
  PRIMARY KEY (`id`),
  KEY `IP` (`IP`),
  KEY `idx_visit_date` (`visit_date`),
  KEY `idx_result` (`result`),
  KEY `idx_domain_date` (`domain`,`visit_date`),
  KEY `idx_country` (`country`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
