#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE
import os

# 创建演示文稿
prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)

# 定义颜色
TITLE_COLOR = RGBColor(0, 51, 102)
ACCENT_COLOR = RGBColor(0, 112, 192)
TEXT_COLOR = RGBColor(33, 33, 33)
ALERT_COLOR = RGBColor(192, 0, 0)
SUCCESS_COLOR = RGBColor(0, 128, 0)

def add_title_slide(title, subtitle):
    slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(slide_layout)
    
    shape = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, prs.slide_height)
    shape.fill.solid()
    shape.fill.fore_color.rgb = TITLE_COLOR
    shape.line.fill.background()
    
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(2.2), Inches(12.333), Inches(1.5))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(44)
    p.font.bold = True
    p.font.color.rgb = RGBColor(255, 255, 255)
    p.alignment = PP_ALIGN.CENTER
    
    sub_box = slide.shapes.add_textbox(Inches(0.5), Inches(4), Inches(12.333), Inches(1.5))
    tf = sub_box.text_frame
    tf.word_wrap = True
    for i, line in enumerate(subtitle.split('\n')):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = line
        p.font.size = Pt(22)
        p.font.color.rgb = RGBColor(200, 200, 200)
        p.alignment = PP_ALIGN.CENTER
    
    return slide

def add_content_slide(title, bullets, note=None):
    slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(slide_layout)
    
    header = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, Inches(1.1))
    header.fill.solid()
    header.fill.fore_color.rgb = ACCENT_COLOR
    header.line.fill.background()
    
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.25), Inches(12.333), Inches(0.6))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(30)
    p.font.bold = True
    p.font.color.rgb = RGBColor(255, 255, 255)
    
    content_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.3), Inches(12.333), Inches(6))
    tf = content_box.text_frame
    tf.word_wrap = True
    
    for i, bullet in enumerate(bullets):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = bullet
        p.font.size = Pt(18)
        p.font.color.rgb = TEXT_COLOR
        p.space_after = Pt(6)
    
    if note:
        note_box = slide.shapes.add_textbox(Inches(0.5), Inches(6.8), Inches(12.333), Inches(0.5))
        tf = note_box.text_frame
        p = tf.paragraphs[0]
        p.text = note
        p.font.size = Pt(14)
        p.font.color.rgb = RGBColor(128, 128, 128)
        p.font.italic = True
    
    return slide

def add_case_slide(title, case_title, case_content, lessons):
    slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(slide_layout)
    
    header = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, Inches(1.1))
    header.fill.solid()
    header.fill.fore_color.rgb = ACCENT_COLOR
    header.line.fill.background()
    
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.25), Inches(12.333), Inches(0.6))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(30)
    p.font.bold = True
    p.font.color.rgb = RGBColor(255, 255, 255)
    
    # 案例标题
    case_title_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.3), Inches(12.333), Inches(0.5))
    tf = case_title_box.text_frame
    p = tf.paragraphs[0]
    p.text = "【案例】" + case_title
    p.font.size = Pt(20)
    p.font.bold = True
    p.font.color.rgb = ALERT_COLOR
    
    # 案例内容
    case_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.9), Inches(12.333), Inches(3))
    tf = case_box.text_frame
    tf.word_wrap = True
    p = tf.paragraphs[0]
    p.text = case_content
    p.font.size = Pt(18)
    p.font.color.rgb = TEXT_COLOR
    
    # 启示
    lesson_title = slide.shapes.add_textbox(Inches(0.5), Inches(5.2), Inches(12.333), Inches(0.4))
    tf = lesson_title.text_frame
    p = tf.paragraphs[0]
    p.text = "【启示与教训】"
    p.font.size = Pt(18)
    p.font.bold = True
    p.font.color.rgb = SUCCESS_COLOR
    
    lesson_box = slide.shapes.add_textbox(Inches(0.5), Inches(5.7), Inches(12.333), Inches(1.5))
    tf = lesson_box.text_frame
    tf.word_wrap = True
    for i, lesson in enumerate(lessons):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = "● " + lesson
        p.font.size = Pt(17)
        p.font.color.rgb = TEXT_COLOR
    
    return slide

def add_two_column_slide(title, left_title, left_content, right_title, right_content):
    slide_layout = prs.slide_layouts[6]
    slide = prs.slides.add_slide(slide_layout)
    
    header = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, 0, 0, prs.slide_width, Inches(1.1))
    header.fill.solid()
    header.fill.fore_color.rgb = ACCENT_COLOR
    header.line.fill.background()
    
    title_box = slide.shapes.add_textbox(Inches(0.5), Inches(0.25), Inches(12.333), Inches(0.6))
    tf = title_box.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(30)
    p.font.bold = True
    p.font.color.rgb = RGBColor(255, 255, 255)
    
    # 左栏标题
    lt_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.3), Inches(6), Inches(0.5))
    tf = lt_box.text_frame
    p = tf.paragraphs[0]
    p.text = left_title
    p.font.size = Pt(22)
    p.font.bold = True
    p.font.color.rgb = TITLE_COLOR
    
    # 左栏内容
    lc_box = slide.shapes.add_textbox(Inches(0.5), Inches(1.9), Inches(6), Inches(5))
    tf = lc_box.text_frame
    tf.word_wrap = True
    for i, line in enumerate(left_content):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = line
        p.font.size = Pt(17)
        p.font.color.rgb = TEXT_COLOR
        p.space_after = Pt(4)
    
    # 右栏标题
    rt_box = slide.shapes.add_textbox(Inches(6.8), Inches(1.3), Inches(6), Inches(0.5))
    tf = rt_box.text_frame
    p = tf.paragraphs[0]
    p.text = right_title
    p.font.size = Pt(22)
    p.font.bold = True
    p.font.color.rgb = TITLE_COLOR
    
    # 右栏内容
    rc_box = slide.shapes.add_textbox(Inches(6.8), Inches(1.9), Inches(6), Inches(5))
    tf = rc_box.text_frame
    tf.word_wrap = True
    for i, line in enumerate(right_content):
        if i == 0:
            p = tf.paragraphs[0]
        else:
            p = tf.add_paragraph()
        p.text = line
        p.font.size = Pt(17)
        p.font.color.rgb = TEXT_COLOR
        p.space_after = Pt(4)
    
    return slide

# ========== 开始创建充实的PPT ==========

# 1. 封面
add_title_slide("从容启航·安全着陆", "大学生就业心理、安全与思想教育\n2课时（90分钟）")

# 2. 目录
add_content_slide("课程目录", [
    "第一部分：阳光心态与思想领航（45分钟）",
    "  ● 导入：就业心闻播报——数据与案例",
    "  ● 核心一：就业心理解码——4种典型心理误区",
    "  ● 核心二：心理调适工具箱——能力三核与SMART原则",
    "  ● 核心三：就业思想教育——职业观与价值观",
    "",
    "第二部分：就业安全与权益保护（45分钟）",
    "  ● 导入：求职路上的坑——真实案例警示",
    "  ● 核心一：就业陷阱大起底——4大陷阱类型",
    "  ● 核心二：法律武器——三方协议与劳动合同",
    "  ● 核心三：安全应对策略——信息、人身、社交安全"
])

# ========== 第一部分 ==========

# 3. 第一课时封面
add_title_slide("第一课时", "阳光心态与思想领航\n45分钟")

# 4. 导入 - 就业心闻播报（充实版）
add_content_slide("导入：就业心闻播报", [
    "【数据呈现】2024-2025届毕业生就业形势",
    "  ● 2025届毕业生预计达1222万人，同比增加43万",
    "  ● 慢就业比例：约15%的毕业生选择暂不就业",
    "  ● 考研二战比例：较2024届上升8个百分点",
    "  ● 期望薪资与现实差距：平均期望6500元，实际起薪4800元",
    "",
    "【案例】小李的就业焦虑",
    "  计算机专业小李，看到同学拿到大厂offer后，连续失眠一周，",
    "  觉得自己'废物'，开始逃避求职，沉迷游戏。",
    "",
    "【互动投票】你现在的就业状态是？",
    "  A. 胸有成竹  B. 茫然跟随  C. 焦虑逃避"
])

# 5. 核心讲授一 - 就业心理解码（充实版）
add_content_slide("核心讲授一：就业心理解码", [
    "【心理误区一：攀比心理】",
    "  表现：与同学比较薪资、岗位、公司名气",
    "  案例：小王拿到8000元offer，但因为同学拿10000元而拒签",
    "  后果：错失合适机会，陷入持续焦虑",
    "",
    "【心理误区二：依赖心理】",
    "  表现：等父母安排、等学校推荐、等机会上门",
    "  案例：小张毕业半年，每天刷招聘网站但从不敢投递简历",
    "",
    "【心理误区三：自卑心理】",
    "  表现：觉得学校不好、专业不行、能力不够",
    "  案例：二本学生小赵，明明有实习经验却不敢投名企",
    "",
    "【心理误区四：急功近利】",
    "  表现：追求'一步到位'，嫌弃基层岗位",
    "  案例：小陈拒了管培生offer，坚持要找'管理层'岗位"
])

# 6. 压力源分析
add_content_slide("压力来源深度分析", [
    "【社会期待压力】",
    "  ● '大学生就应该坐办公室'的传统观念",
    "  ● 亲戚朋友的'关心'：'找到工作了吗？工资多少？'",
    "  ● 社交媒体上的'成功故事'制造的焦虑",
    "",
    "【同辈压力】",
    "  ● 室友签约后的对比心理",
    "  ● 朋友圈晒offer引发的自我怀疑",
    "  ● 班级群里的签约统计带来的紧迫感",
    "",
    "【自我认知不清】",
    "  ● 不知道自己适合什么岗位",
    "  ● 不清楚自己的核心竞争力",
    "  ● 职业目标模糊，海投简历无针对性",
    "",
    "【转化方法】将'被动焦虑'转化为'主动应对'"
])

# 7. 核心讲授二 - 能力三核模型
add_two_column_slide(
    "核心讲授二：能力三核模型",
    "什么是能力三核？",
    [
        "【知识】K(Knowledge)",
        "  ● 专业理论知识",
        "  ● 行业背景知识",
        "  ● 证书资质",
        "",
        "【技能】S(Skill)",
        "  ● 可迁移能力",
        "  ● 沟通、协作、分析",
        "  ● 软件操作、数据分析",
        "",
        "【才干】T(Talent)",
        "  ● 个人特质",
        "  ● 性格优势",
        "  ● 潜在天赋"
    ],
    "能力三核应用案例",
    [
        "【案例】会计专业学生",
        "",
        "知识：会计准则、税法",
        "技能：Excel、财务软件",
        "才干：细心、数字敏感",
        "",
        "可胜任岗位：",
        "  ● 企业会计",
        "  ● 审计助理",
        "  ● 财务分析师",
        "  ● 税务专员",
        "  ● 成本核算员"
    ]
)

# 8. SMART原则详解
add_content_slide("心理调适工具箱：SMART原则", [
    "【S-Specific 具体明确】",
    "  ❌ '我要找工作'  →  ✅ '我要找市场营销类工作'",
    "",
    "【M-Measurable 可衡量】",
    "  ❌ '多投简历'  →  ✅ '每周投递15份简历'",
    "",
    "【A-Achievable 可实现】",
    "  ❌ '下周拿offer'  →  ✅ '下周参加3场面试'",
    "",
    "【R-Relevant 相关性】",
    "  求职行动与职业目标保持一致",
    "",
    "【T-Time-bound 有时限】",
    "  ❌ '准备面试'  →  ✅ '3天内完成自我介绍稿'",
    "",
    "【作业】用SMART原则制定你的本周求职计划"
])

# 9. 情绪释放方法
add_content_slide("心理调适：情绪管理与释放", [
    "【4-7-8呼吸放松法】",
    "  1. 用鼻子吸气4秒",
    "  2. 屏住呼吸7秒",
    "  3. 用嘴巴呼气8秒",
    "  4. 重复3-4个循环",
    "",
    "【运动减压】",
    "  ● 每天30分钟有氧运动",
    "  ● 跑步、游泳、打球",
    "  ● 运动产生的多巴胺能缓解焦虑",
    "",
    "【学校心理咨询资源】",
    "  ● 心理咨询中心：免费一对一咨询",
    "  ● 就业心理工作坊",
    "  ● 焦虑情绪团体辅导",
    "",
    "【决策平衡单】工具演示——用科学方法理性选择offer"
])

# 10. 核心讲授三 - 就业思想教育
add_content_slide("核心讲授三：就业形势与职业观", [
    "【当前就业形势分析】",
    "  ● 产业结构调整：传统制造业缩减，新兴产业扩张",
    "  ● AI对岗位的影响：基础文员、简单翻译等岗位减少",
    "  ● 新职业涌现：AI训练师、数据标注员、直播运营",
    "  ● 灵活就业增长：自由职业、平台经济从业者增加",
    "",
    "【正确的职业价值观】",
    "  ● 弘扬'工匠精神'——专注、精益、创新",
    "  ● 基层就业项目：",
    "    - 选调生：服务基层，积累经验",
    "    - 西部计划：到祖国需要的地方去",
    "    - 三支一扶：支农、支教、支医、扶贫",
    "",
    "【先就业后择业】",
    "  第一份工作重要的是积累经验，而非薪资高低"
])

# 11. 诚信教育
add_case_slide(
    "诚信教育：简历不造假，签约不违约",
    "虚构实习经历被发现",
    "某学生在简历中虚构了'腾讯产品经理助理'实习经历，面试时HR详细询问项目细节，学生无法回答，当场被识破。该学生被列入公司黑名单，并在行业内通报。",
    [
        "简历造假一旦被查出，将被列入诚信黑名单",
        "背景调查越来越严格，不要心存侥幸",
        "诚信是职场最宝贵的品质，失去难以挽回",
        "能力不足可以学习，诚信缺失无法弥补"
    ]
)

# 12. 讨论题
add_two_column_slide(
    "讨论：一线城市 vs 回乡建设",
    "一线城市打拼",
    [
        "优势：",
        "  ● 更多就业机会",
        "  ● 更高的薪资水平",
        "  ● 更大的发展空间",
        "  ● 丰富的学习资源",
        "",
        "挑战：",
        "  ● 生活成本高",
        "  ● 竞争激烈",
        "  ● 落户难度大",
        "  ● 工作强度大"
    ],
    "回乡建设发展",
    [
        "优势：",
        "  ● 生活成本低",
        "  ● 家庭支持系统",
        "  ● 竞争压力小",
        "  ● 乡村振兴机遇",
        "",
        "机遇：",
        "  ● 县域经济发展快",
        "  ● 电商直播等新业态",
        "  ● 大学生创业补贴",
        "  ● 基层人才需求大"
    ]
)

# 13. 优秀校友案例
add_case_slide(
    "优秀校友案例分享",
    "从基层做起的李学长",
    "2018届毕业生小李，放弃大城市offer，回到家乡县城做电商助农。从一个人一台电脑开始，现在团队20人，年销售额500万，带动周边100多户农民增收，获评'省级乡村振兴青年先锋'。",
    [
        "职业选择没有绝对的对错，适合自己最重要",
        "基层也有大舞台，关键看你怎么做",
        "把个人发展融入国家需要，更有意义",
        "坚持和执行力比起点更重要"
    ]
)

# 14. 第一课时小结
add_content_slide("第一课时小结", [
    "【核心要点回顾】",
    "  ● 识别4种就业心理误区：攀比、依赖、自卑、急功近利",
    "  ● 掌握心理调适方法：能力三核模型、SMART原则",
    "  ● 了解当前就业形势：产业结构调整、AI影响、新职业涌现",
    "  ● 树立正确的职业观：先就业后择业、基层就业价值",
    "",
    "【课后作业】",
    "  撰写《我的职业优势清单》",
    "  1. 列出你的知识（专业、证书）",
    "  2. 列出你的技能（软件、语言、沟通能力）",
    "  3. 列出你的才干（性格优势、特长）",
    "  4. 匹配适合的3-5个岗位",
    "",
    "【金句】心态决定状态，眼界决定境界"
])

# ========== 第二部分 ==========

# 15. 第二课时封面
add_title_slide("第二课时", "就业安全与权益保护\n45分钟")

# 16. 情景剧导入
add_content_slide("情景剧导入：求职路上的坑", [
    "【案例一：高薪诱惑骗取培训费】",
    "  '零基础月薪过万'的招聘广告，面试后要求先交2万元培训费，",
    "  承诺培训后包就业。交钱后培训质量极差，最后公司以各种理由拒绝录用。",
    "",
    "【案例二：口头承诺不兑现】",
    "  HR口头承诺'试用期后转正薪资8000'，但合同只写'按公司规定'，",
    "  转正后被告知薪资只有5000，因无书面证据无法维权。",
    "",
    "【案例三：黑中介扣押证件】",
    "  中介机构以帮助找工作为由，收取身份证、毕业证'办理入职'，",
    "  之后要求再交5000元'安置费'，否则扣押证件不还。",
    "",
    "【讨论】这些案例有哪些共同特征？如何避免？"
])

# 17. 核心讲授一 - 就业陷阱
add_content_slide("核心讲授一：就业陷阱大起底（一）", [
    "【陷阱一：黑中介与假招聘】",
    "  特征：",
    "    ● 收取各种名目的费用（报名费、培训费、服装费）",
    "    ● 承诺高薪但岗位描述模糊",
    "    ● 公司信息查不到或刚注册",
    "  识别：",
    "    ● 凡是要先交钱的，99%是骗子",
    "    ● 在国家企业信用信息公示系统查询公司资质",
    "",
    "【陷阱二：传销陷阱】",
    "  特征：",
    "    ● 拉人头、发展下线",
    "    ● 限制人身自由，没收手机",
    "    ● 上课洗脑，鼓吹'快速致富'",
    "  识别：",
    "    ● 工作地点偏僻、面试地点变更",
    "    ● 入职需先交钱买产品",
    "    ● 公司没有实际产品或服务"
])

# 18. 就业陷阱（二）
add_content_slide("核心讲授一：就业陷阱大起底（二）", [
    "【陷阱三：试用期滥用】",
    "  违法行为：",
    "    ● 单独签试用期合同（违法）",
    "    ● 试用期超过法定期限：",
    "      - 合同期<1年：试用期≤1个月",
    "      - 1年≤合同期<3年：试用期≤2个月",
    "      - 合同期≥3年：试用期≤6个月",
    "    ● 试用期不交社保（违法）",
    "    ● 试用期工资低于转正工资80%（违法）",
    "",
    "【陷阱四：合同猫腻】",
    "    ● 口头合同：不签书面合同",
    "    ● 阴阳合同：签两份不同内容的合同",
    "    ● 霸王条款：'自愿放弃社保'、'工伤自负'",
    "    ● 空白合同：让你先签字，公司后填内容"
])

# 19. 核心讲授二 - 法律武器
add_two_column_slide(
    "核心讲授二：法律武器",
    "《就业协议书》（三方协议）",
    [
        "【性质】",
        "  民事协议，不是劳动合同",
        "",
        "【注意】",
        "  ● 违约金条款：",
        "    一般不得超过月薪",
        "  ● 补充条款：",
        "    需双方协商一致",
        "",
        "【解约流程】",
        "  1. 取得原单位解约函",
        "  2. 向学校申请新协议",
        "  3. 与新单位签约"
    ],
    "《劳动合同》必备条款",
    [
        "【必须包含】",
        "  ● 用人单位信息",
        "  ● 劳动者信息",
        "  ● 合同期限",
        "  ● 工作内容与地点",
        "  ● 工作时间和休息休假",
        "  ● 劳动报酬",
        "  ● 社会保险",
        "  ● 劳动保护",
        "",
        "【签约时间】",
        "  用工之日起一个月内",
        "  超过一个月未签：",
        "  支付双倍工资"
    ]
)

# 20. 劳动合同审核要点
add_content_slide("劳动合同审核实操指南", [
    "【签约前必查】",
    "  1. 国家企业信用信息公示系统（gsxt.gov.cn）",
    "     查：是否存续、有无经营异常、有无失信记录",
    "  2. 天眼查/企查查",
    "     查：法律诉讼、劳动仲裁记录",
    "",
    "【合同重点条款】",
    "  ● 工作地点：写清楚城市，避免'公司安排'",
    "  ● 薪酬：写明月薪数额，区分基本工资和绩效",
    "  ● 社保：入职即缴，非转正后缴纳",
    "  ● 违约金：只限培训和竞业限制两种情况",
    "  ● 工作地点变更：需双方协商",
    "",
    "【避坑提醒】",
    "  ● 不签空白合同",
    "  ● 不签'自愿放弃社保'承诺书",
    "  ● 保留合同原件（自己那份）"
])

# 21. 维权路径
add_content_slide("维权路径与联系方式", [
    "【劳动监察投诉】",
    "  电话：12333（全国劳动保障热线）",
    "  内容：拖欠工资、不缴社保、违法加班",
    "  时效：违法行为发生之日起2年内",
    "",
    "【劳动仲裁】",
    "  申请：向工作地或公司注册地劳动仲裁委",
    "  时效：争议发生之日起1年内",
    "  费用：免费",
    "  材料：劳动合同、工资流水、工作证明",
    "",
    "【法律援助】",
    "  电话：12348（法律援助热线）",
    "  条件：经济困难或特殊案件",
    "  服务：免费法律咨询、代理",
    "",
    "【学校就业指导中心】",
    "  协助处理就业纠纷，提供法律咨询"
])

# 22. 核心讲授三 - 安全应对策略
add_content_slide("核心讲授三：安全应对策略", [
    "【信息安全：简历脱敏处理】",
    "  ● 身份证号：可写后四位或'入职后提供'",
    "  ● 家庭住址：写到区/县即可",
    "  ● 家庭成员：不写具体信息",
    "  ● 联系方式：用专门求职的手机号/邮箱",
    "",
    "【人身安全：面试安全防护】",
    "  ● 面试前：告知亲友面试地点、时间",
    "  ● 面试时：保持手机畅通，设置紧急联系人",
    "  ● 面试地点偏僻：要求视频面试或公开场所",
    "  ● 直觉不对：立即离开，安全最重要",
    "",
    "【社交安全：隐私保护】",
    "  ● 面试不问：婚恋状况、生育计划、家庭背景",
    "  ● 回答话术：'这与工作能力无关，我更想讨论岗位相关的问题'"
])

# 23. 角色扮演场景
add_content_slide("角色扮演：应对话术练习", [
    "【场景一：HR要求提供身份证'办理入职'】",
    "  学员回答示范：",
    "  '我可以提供身份证复印件并注明用途，正式入职时再提供原件可以吗？'",
    "",
    "【场景二：面试官问'有没有男朋友？打算什么时候结婚？'】",
    "  学员回答示范：",
    "  '我的个人规划不会影响工作投入。关于职业发展，我想了解这个岗位的晋升路径。'",
    "",
    "【场景三：HR说'签这个自愿放弃社保声明，公司多给你500元'】",
    "  学员回答示范：",
    "  '缴纳社保是法律规定的义务，我希望按正规流程办理入职手续。'",
    "",
    "【两人一组练习】5分钟准备 + 3分钟展示"
])

# 24. 资源推介
add_content_slide("总结与资源推介", [
    "【本节课核心要点】",
    "  ● 识别4类就业陷阱：黑中介、传销、试用期滥用、合同猫腻",
    "  ● 掌握2类关键文书：三方协议、劳动合同的审核要点",
    "  ● 学会3维安全保护：信息安全、人身安全、社交安全",
    "",
    "【推荐资源】",
    "  ● 教育部'24365'平台：job.moe.gov.cn",
    "    - 官方招聘信息",
    "    - 就业指导课程",
    "    - 在线职业测评",
    "",
    "  ● 国家企业信用信息公示系统：gsxt.gov.cn",
    "    - 查询企业资质",
    "    - 核实公司信息",
    "",
    "  ● 学校就业指导中心",
    "    - 法律咨询",
    "    - 就业纠纷协助",
    "    - 心理辅导"
])

# 25. 结束页
add_title_slide("祝大家前程似锦", "不仅拿到offer，更能平安、自信地\n走好职场第一步！\n\n有任何就业问题，随时联系就业指导中心")

# 保存
output_path = "/root/.openclaw/workspace/大学生就业指导课件_充实版.pptx"
prs.save(output_path)
print(f"PPT已保存: {output_path}")
print(f"文件大小: {os.path.getsize(output_path) / 1024:.1f} KB")
print(f"总页数: {len(prs.slides)}")
