create table if not exists course_product_details (
  product_id text primary key references products(id) on delete cascade,
  instructor text not null default '',
  course_type text not null default 'free',
  member_level_required integer not null default 0,
  lesson_count integer not null default 0,
  starts_at timestamptz,
  location text not null default '',
  course_status text not null default 'anytime',
  direction text not null default '',
  course_format text not null default '线上课程',
  cover_label text not null default '',
  audience text not null default '',
  outcomes text[] not null default '{}',
  modules text[] not null default '{}',
  access_note text not null default '',
  sort_order integer not null default 0,
  status text not null default 'draft',
  created_at timestamptz not null default now(),
  updated_at timestamptz not null default now()
);

insert into course_product_details (
  product_id, instructor, course_type, member_level_required, lesson_count,
  starts_at, location, course_status, direction, course_format, cover_label,
  audience, outcomes, modules, access_note, sort_order, status
)
values
  (
    'course-data-governance-fundamentals', '刘强', 'junior', 1, 12,
    '2026-06-10T09:00:00+08:00', '大连市大数据研究院', 'upcoming', '数据治理', '直播课',
    '数据治理课程封面：资产盘点、标准管理与质量规则工作台',
    '适合数据负责人、治理专员、业务骨干和正在建设数据治理体系的团队。',
    array['建立数据治理组织与职责分工','完成数据资产盘点与目录设计','制定质量、安全和标准管理规则','形成可落地的治理推进清单'],
    array['数据治理体系与组织机制','数据资产盘点和目录编制','数据质量、安全与标准管理','治理项目推进与成果验收'],
    '直播课开课后可在个人中心查看学习入口、课程资料和学习记录。', 10, 'published'
  ),
  (
    'course-smart-city-planning', '陈晓丽', 'free', 0, 6,
    null, '线上', 'anytime', '数字化转型', '线上课程',
    '智慧城市课程封面：城市数字底座、治理场景与规划蓝图',
    '适合政府信息化人员、园区运营团队和参与智慧城市项目规划的业务负责人。',
    array['理解智慧城市顶层设计方法','梳理城市治理与公共服务场景','设计平台架构和指标体系','形成规划文本与实施路线'],
    array['智慧城市建设目标与边界','城市治理场景梳理方法','平台架构与数据底座设计','实施路径、指标和评估体系'],
    '录播课程可随时学习，购买或加入后在个人中心进入课程目录。', 20, 'published'
  ),
  (
    'course-llm-government-applications', '孙涛', 'senior', 2, 8,
    '2026-06-20T14:00:00+08:00', '线上直播', 'upcoming', 'AI应用', '直播课',
    'AI应用课程封面：政务大模型、智能办理与协同办公场景',
    '适合政务服务、审批管理、数字化平台主管和希望落地 AI 应用的业务团队。',
    array['识别政务大模型适用场景','理解智能问答与辅助办理流程','设计试点应用和安全边界','形成可评估的落地方案'],
    array['大模型能力边界与政务场景','智能办理和公文处理案例','数据安全与应用治理要求','试点方案设计和效果评估'],
    '高级会员专属直播课，开课前会开放资料和直播入口。', 30, 'published'
  ),
  (
    'course-industrial-internet-transformation', '赵敏', 'paid', 0, 10,
    null, '线上', 'anytime', '企业实训', '线上课程',
    '制造业数字化课程封面：生产现场、工业互联网与转型路径',
    '适合制造企业管理层、信息化部门、车间负责人和产业服务人员。',
    array['识别制造业数字化转型痛点','梳理生产、设备和供应链场景','制定分阶段转型路线图','形成项目优先级和投资建议'],
    array['制造业数字化现状诊断','生产现场与设备数据场景','工业互联网平台建设路径','转型路线图和项目组合设计'],
    '录播课程，购买后可随时学习并查看工具模板。', 40, 'published'
  ),
  (
    'course-data-platform-architecture', '王家明', 'junior', 1, 15,
    '2026-07-01T09:00:00+08:00', '大连市大数据研究院', 'upcoming', '数据治理', '直播课',
    '数据平台课程封面：数据中台、湖仓一体与架构设计',
    '适合数据平台负责人、架构师、数据工程团队和数字化项目技术负责人。',
    array['理解数据平台主流架构选型','设计数据接入、建模与服务链路','规划指标体系和数据应用层','形成平台建设蓝图和演进计划'],
    array['数据中台、数据湖和湖仓一体','数据接入、治理和建模链路','指标体系与数据服务设计','平台架构蓝图和技术选型'],
    '直播课开课后可查看回放和课程资料。', 50, 'published'
  ),
  (
    'course-digital-economy-policy', '李红', 'free', 0, 4,
    null, '线上', 'anytime', '政策解读', '线上课程',
    '政策解读课程封面：数字经济政策、企业策略与机会清单',
    '适合企业战略、园区服务、政策研究和项目申报相关人员。',
    array['理解数字经济政策重点方向','识别企业可申报和可转型机会','形成政策机会清单','设计企业行动策略'],
    array['数字经济政策框架解读','地方政策和产业机会识别','企业策略和项目申报路径','机会清单与行动计划设计'],
    '免费录播课程，登录后可加入学习。', 60, 'published'
  )
on conflict (product_id) do update set
  instructor = excluded.instructor,
  course_type = excluded.course_type,
  member_level_required = excluded.member_level_required,
  lesson_count = excluded.lesson_count,
  starts_at = excluded.starts_at,
  location = excluded.location,
  course_status = excluded.course_status,
  direction = excluded.direction,
  course_format = excluded.course_format,
  cover_label = excluded.cover_label,
  audience = excluded.audience,
  outcomes = excluded.outcomes,
  modules = excluded.modules,
  access_note = excluded.access_note,
  sort_order = excluded.sort_order,
  status = excluded.status,
  updated_at = now();
