-- ============================================================
-- V23: 教练账号测试数据
-- 描述: 创建教练角色、教练用户及相关团课测试数据
-- 日期: 2026-06-22
-- ============================================================

-- ============================================================
-- 1. 新增教练专属权限
--    教练只能查看自己教授的团课/预约/签到信息，不能修改数据库
-- ============================================================
INSERT INTO sys_permission (permission_name, permission_code, resource, action, description, status, create_by, update_by, created_at, updated_at) VALUES
('查看自己的团课',   'coach:course:view',   '/api/coach/courses',   'GET',  '查看教练自己教授的团课列表及详情',    1, 'system', 'system', NOW(), NOW()),
('查看自己团课的预约', 'coach:booking:view',  '/api/coach/bookings',  'GET',  '查看教练自己团课的会员预约记录',      1, 'system', 'system', NOW(), NOW()),
('查看自己团课的签到', 'coach:signIn:view',   '/api/coach/signins',   'GET',  '查看教练自己团课的会员签到记录',      1, 'system', 'system', NOW(), NOW()),
('教练执行签到',      'coach:signIn:create', '/api/coach/signins',   'POST', '教练为自己团课的会员执行签到操作',    1, 'system', 'system', NOW(), NOW())
ON CONFLICT (permission_code) DO NOTHING;

-- ============================================================
-- 2. 教练角色
-- ============================================================
INSERT INTO sys_role (id, role_name, role_key, role_sort, status, create_by, update_by, created_at, updated_at)
VALUES (5, '教练', 'coach', 5, 1, 'system', 'system', NOW(), NOW())
ON CONFLICT (role_key) DO NOTHING;

-- ============================================================
-- 3. 教练用户（密码: Test@123）
-- ============================================================
INSERT INTO sys_user (id, username, password, email, phone, nickname, status, create_by, update_by, created_at, updated_at)
VALUES (20, 'coach', '$2a$12$nZ1EMUpZQljbnEdIKzH72eHlDJKUmHmHppnTTVth/SlHs5VpSAr8C', 'coach@novalon.com', '13900000001', '张教练', 1, 'system', 'system', NOW(), NOW())
ON CONFLICT (username) DO NOTHING;

-- ============================================================
-- 4. 教练角色关联
-- ============================================================
INSERT INTO user_role (user_id, role_id, created_by, created_at)
VALUES (20, 5, 'system', NOW())
ON CONFLICT (user_id, role_id) DO NOTHING;

-- ============================================================
-- 5. 为教练角色分配有限权限
--    教练只能查看自己教授的团课、查看自己团课的预约/签到信息、为自己团课的会员签到
--    不能对数据库进行写操作（签到属于业务操作，非数据库直接写入）
-- ============================================================
INSERT INTO sys_role_permission (role_id, permission_id, create_by, update_by, created_at, updated_at)
SELECT 5, id, 'system', 'system', NOW(), NOW()
FROM sys_permission
WHERE permission_code IN (
    'coach:course:view',      -- 查看自己的团课
    'coach:booking:view',     -- 查看自己团课的预约信息
    'coach:signIn:view',      -- 查看自己团课的签到信息
    'coach:signIn:create',    -- 为自己团课的会员签到
    'system:notice:view'      -- 查看系统公告
)
AND NOT EXISTS (
    SELECT 1 FROM sys_role_permission WHERE role_id = 5 AND permission_id = sys_permission.id
);

-- ============================================================
-- 6. 为教练分配今天的测试团课
-- ============================================================
INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, description, point_card_amount, create_by, created_at, updated_at)
VALUES
('核心力量训练', 20, (SELECT id FROM group_course_type WHERE type_name = '核心训练' LIMIT 1), 
 CURRENT_DATE + TIME '08:00', CURRENT_DATE + TIME '09:00', 15, 3, '0', '健身房B区', '针对核心肌群的专项训练，适合所有水平学员', 1, 'system', NOW(), NOW()),

('瑜伽入门', 20, (SELECT id FROM group_course_type WHERE type_name = '瑜伽入门' LIMIT 1),
 CURRENT_DATE + TIME '10:00', CURRENT_DATE + TIME '11:00', 12, 5, '0', '瑜伽教室', '基础的瑜伽体式教学，新课上线欢迎参加', 1, 'system', NOW(), NOW()),

('动感单车', 20, (SELECT id FROM group_course_type WHERE type_name = '动感单车' LIMIT 1),
 CURRENT_DATE + TIME '14:00', CURRENT_DATE + TIME '15:00', 20, 8, '0', '单车房', '高强度燃脂骑行，动感音乐带你飞', 2, 'system', NOW(), NOW()),

('晚间普拉提', 20, (SELECT id FROM group_course_type WHERE type_name = '普拉提' LIMIT 1),
 CURRENT_DATE + TIME '18:00', CURRENT_DATE + TIME '19:00', 10, 2, '0', '普拉提教室', '注重核心力量和身体控制，放松一天疲劳', 1, 'system', NOW(), NOW());

-- ============================================================
-- 7. 为教练创建一个未来的团课（方便测试时间表）
-- ============================================================
INSERT INTO group_course (course_name, coach_id, course_type, start_time, end_time, max_members, current_members, status, location, description, point_card_amount, create_by, created_at, updated_at)
VALUES
('HIIT燃脂训练', 20, (SELECT id FROM group_course_type WHERE type_name = 'HIIT训练' LIMIT 1),
 CURRENT_DATE + INTERVAL '1 day' + TIME '08:00', CURRENT_DATE + INTERVAL '1 day' + TIME '09:00',
 15, 0, '0', '综合训练区', '高强度间歇训练，挑战心肺极限', 2, 'system', NOW(), NOW()),

('周末瑜伽', 20, (SELECT id FROM group_course_type WHERE type_name = '瑜伽进阶' LIMIT 1),
 CURRENT_DATE + INTERVAL '3 days' + TIME '09:00', CURRENT_DATE + INTERVAL '3 days' + TIME '10:30',
 12, 0, '0', '瑜伽教室', '针对有基础的进阶瑜伽课程', 1, 'system', NOW(), NOW());

-- ============================================================
-- 8. 重置序列值
-- ============================================================
SELECT setval('sys_role_id_seq', GREATEST((SELECT COALESCE(MAX(id), 0) FROM sys_role), 5));
SELECT setval('sys_user_id_seq', GREATEST((SELECT COALESCE(MAX(id), 0) FROM sys_user), 20));
SELECT setval('group_course_id_seq', (SELECT COALESCE(MAX(id), 0) FROM group_course));
