-- 平台治理：租户 / 审批 / 审计（字段以 platform_store 实际写入为准）
CREATE TABLE IF NOT EXISTS tenants (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    code TEXT,
    status TEXT DEFAULT 'active',
    owner_user_id TEXT,
    quota TEXT,
    retention_policy_id TEXT,
    create_time TEXT
);

CREATE TABLE IF NOT EXISTS approval_templates (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    steps TEXT,
    create_time TEXT
);

CREATE TABLE IF NOT EXISTS approval_instances (
    id TEXT PRIMARY KEY,
    template_id TEXT,
    resource_type TEXT,
    resource_id TEXT,
    applicant_id TEXT,
    status TEXT DEFAULT 'pending',
    current_step INTEGER DEFAULT 0,
    create_time TEXT
);

CREATE TABLE IF NOT EXISTS approval_steps (
    id TEXT PRIMARY KEY,
    instance_id TEXT,
    step_index INTEGER,
    approver_id TEXT,
    status TEXT DEFAULT 'pending',
    comment TEXT,
    time TEXT
);

CREATE TABLE IF NOT EXISTS audit_logs (
    id TEXT PRIMARY KEY,
    tenant_id TEXT,
    project_id TEXT,
    actor_id TEXT,
    action TEXT,
    target_type TEXT,
    target_id TEXT,
    detail TEXT,
    client_ip TEXT,
    time TEXT
);

-- 幂等升级 audit_logs 表：新增字段（已存在则跳过）
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS trace_id TEXT;
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS request_method TEXT;
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS request_path TEXT;
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS status_code INTEGER;
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS duration_ms REAL;
ALTER TABLE audit_logs ADD COLUMN IF NOT EXISTS extra JSONB;

-- 索引（已存在则跳过）
CREATE INDEX IF NOT EXISTS idx_audit_trace ON audit_logs(trace_id);
CREATE INDEX IF NOT EXISTS idx_audit_actor_time ON audit_logs(actor_id, time);
CREATE INDEX IF NOT EXISTS idx_audit_target ON audit_logs(target_type, target_id);

CREATE TABLE IF NOT EXISTS retention_policies (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    scope TEXT,
    rule TEXT,
    status TEXT DEFAULT 'active',
    create_time TEXT,
    create_by TEXT,
    updated_at TEXT
);

-- ===================== 操作日志表 =====================
-- 记录用户在每个业务模块的详细操作（成功/失败、报错信息等）
CREATE TABLE IF NOT EXISTS operation_logs (
    id TEXT PRIMARY KEY,
    user_id TEXT,               -- 操作用户 ID
    username TEXT,              -- 操作用户名（冗余，便于查询）
    module TEXT,                -- 业务模块：fine-tune/model-eval/model-inference/dataset/data-process/data-convert/model-manage
    action TEXT,                -- 具体动作：create/start/stop/delete/upload/convert 等
    target_type TEXT,           -- 资源类型
    target_id TEXT,             -- 资源 ID
    target_name TEXT,           -- 资源名称（便于阅读）
    status TEXT NOT NULL,       -- success / failure
    error_message TEXT,         -- 失败时的报错信息
    detail TEXT,                -- 操作详情 JSON（参数摘要）
    client_ip TEXT,             -- 客户端 IP
    request_method TEXT,        -- HTTP 方法
    request_path TEXT,          -- 请求路径
    trace_id TEXT,              -- 链路追踪 ID
    duration_ms REAL,           -- 耗时(ms)
    create_time TEXT            -- 操作时间
);

-- 幂等升级 operation_logs 表：新增字段（已存在则跳过）
ALTER TABLE operation_logs ADD COLUMN IF NOT EXISTS error_type TEXT;       -- 异常类型：RuntimeError / ValueError / ConnectionError
ALTER TABLE operation_logs ADD COLUMN IF NOT EXISTS error_traceback TEXT; -- 完整异常堆栈
ALTER TABLE operation_logs ADD COLUMN IF NOT EXISTS func_name TEXT;       -- 出错的函数名

-- 索引
CREATE INDEX IF NOT EXISTS idx_op_user_time ON operation_logs(user_id, create_time DESC);
CREATE INDEX IF NOT EXISTS idx_op_module_time ON operation_logs(module, create_time DESC);
CREATE INDEX IF NOT EXISTS idx_op_status ON operation_logs(status, create_time DESC);
CREATE INDEX IF NOT EXISTS idx_op_action ON operation_logs(action);
CREATE INDEX IF NOT EXISTS idx_op_create_time ON operation_logs(create_time DESC);
CREATE INDEX IF NOT EXISTS idx_op_error_type ON operation_logs(error_type);
