-- 创建训练项目表 (AK Training Projects)
-- 这是训练活动的模板/项目定义，不同于训练计划(ak_training_plans)
-- 统一使用ak_前缀命名约定

CREATE TABLE public.ak_training_projects (
    id SERIAL PRIMARY KEY, -- 项目ID，使用SERIAL自增
    name VARCHAR(128) NOT NULL, -- 项目名称
    description TEXT, -- 项目描述
    category VARCHAR(64) NOT NULL DEFAULT 'general', -- 项目分类
    difficulty INTEGER NOT NULL DEFAULT 1 CHECK (difficulty >= 1 AND difficulty <= 5), -- 难度等级 1-5
    difficulty_level INTEGER, -- 备用难度等级字段，与代码类型兼容
    duration INTEGER NOT NULL DEFAULT 30, -- 持续时间（分钟）
    duration_minutes INTEGER, -- 备用时长字段，与代码类型兼容
    equipment_needed TEXT, -- 所需设备
    instructions TEXT, -- 训练指导
    training_points TEXT, -- 训练要点
    scoring_criteria TEXT, -- 评分标准
    image_url VARCHAR(512), -- 项目图片URL
    status VARCHAR(16) DEFAULT 'active' CHECK (status IN ('active', 'inactive')), -- 状态
    usage_count INTEGER DEFAULT 0, -- 使用次数统计
    created_at TIMESTAMP WITH TIME ZONE DEFAULT now(), -- 创建时间
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() -- 更新时间
);

-- 添加表注释
COMMENT ON TABLE public.ak_training_projects IS '训练项目表 - 定义可复用的训练活动模板';

-- 创建索引
CREATE INDEX idx_ak_training_projects_category ON public.ak_training_projects(category);
CREATE INDEX idx_ak_training_projects_difficulty ON public.ak_training_projects(difficulty);
CREATE INDEX idx_ak_training_projects_status ON public.ak_training_projects(status);
CREATE INDEX idx_ak_training_projects_created_at ON public.ak_training_projects(created_at);

-- 插入示例数据
INSERT INTO public.ak_training_projects (name, description, category, difficulty, duration, training_points, scoring_criteria, status) VALUES
('5公里跑步', '标准5公里长跑训练', 'running', 2, 30, '保持匀速，注意呼吸节奏', '时间、心率、配速', 'active'),
('俯卧撑训练', '标准俯卧撑力量训练', 'strength', 1, 15, '动作标准，控制节奏', '数量、动作质量', 'active'),
('篮球基础', '篮球基本技能训练', 'basketball', 2, 45, '运球、投篮、传球基础', '技术动作、配合意识', 'active'),
('游泳训练', '自由泳技术训练', 'swimming', 3, 60, '动作协调，呼吸配合', '距离、技术、时间', 'active'),
('瑜伽基础', '基础瑜伽体式练习', 'yoga', 1, 30, '动作缓慢，保持呼吸', '柔韧性、平衡性', 'active'),
('足球基础', '足球基本技能训练', 'football', 2, 45, '传球、射门、带球基础', '技术动作、配合', 'active'),
('羽毛球训练', '羽毛球基础训练', 'badminton', 2, 40, '发球、接球、步法', '技术、反应速度', 'active'),
('力量训练', '综合力量训练', 'strength', 3, 45, '正确姿势，循序渐进', '力量、耐力', 'active');

-- 创建更新触发器函数（如果不存在）
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = now();
    RETURN NEW;
END;
$$ language 'plpgsql';

-- 为表创建更新触发器
CREATE TRIGGER update_ak_training_projects_updated_at 
    BEFORE UPDATE ON public.ak_training_projects 
    FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();

-- 创建数据库视图，为了兼容不带ak_前缀的查询
CREATE OR REPLACE VIEW public.training_projects AS 
SELECT 
    id,
    name,
    description,
    category,
    difficulty,
    difficulty_level,
    duration,
    duration_minutes,
    equipment_needed,
    instructions,
    training_points,
    scoring_criteria,
    image_url,
    status,
    usage_count,
    created_at,
    updated_at
FROM public.ak_training_projects;

-- 添加视图注释
COMMENT ON VIEW public.training_projects IS '训练项目视图 - 提供对ak_training_projects的兼容访问';
