#!/usr/bin/env python3
"""
組織理論實務概論 — 簡報腳本
小綠大腦自動產出
"""

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

prs = Presentation()
prs.slide_width = Inches(13.333)
prs.slide_height = Inches(7.5)

# 配色方案：現代簡約
COLORS = {
    'bg_dark': RGBColor(0x1A, 0x1A, 0x2E),
    'bg_light': RGBColor(0xF5, 0xF5, 0xF5),
    'accent': RGBColor(0x00, 0x96, 0xC7),
    'accent2': RGBColor(0x00, 0xB4, 0xD8),
    'white': RGBColor(0xFF, 0xFF, 0xFF),
    'dark': RGBColor(0x33, 0x33, 0x33),
    'gray': RGBColor(0x66, 0x66, 0x66),
    'orange': RGBColor(0xF7, 0x7F, 0x00),
}

def set_slide_bg(slide, color):
    bg = slide.background
    fill = bg.fill
    fill.solid()
    fill.fore_color.rgb = color

def add_title_slide(title, subtitle):
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    set_slide_bg(slide, COLORS['bg_dark'])
    
    txBox = slide.shapes.add_textbox(Inches(1), Inches(2.5), Inches(11), Inches(1.5))
    tf = txBox.text_frame
    tf.word_wrap = True
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(44)
    p.font.bold = True
    p.font.color.rgb = COLORS['white']
    p.alignment = PP_ALIGN.CENTER
    
    txBox2 = slide.shapes.add_textbox(Inches(1), Inches(4.2), Inches(11), Inches(1))
    tf2 = txBox2.text_frame
    p2 = tf2.paragraphs[0]
    p2.text = subtitle
    p2.font.size = Pt(24)
    p2.font.color.rgb = COLORS['accent2']
    p2.alignment = PP_ALIGN.CENTER
    
    return slide

def add_content_slide(title, content_lines, layout='standard'):
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    set_slide_bg(slide, COLORS['bg_light'])
    
    txBox = slide.shapes.add_textbox(Inches(0.8), Inches(0.5), Inches(11.7), Inches(1))
    tf = txBox.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(36)
    p.font.bold = True
    p.font.color.rgb = COLORS['bg_dark']
    
    txBox2 = slide.shapes.add_textbox(Inches(0.8), Inches(1.8), Inches(11.7), Inches(5.2))
    tf2 = txBox2.text_frame
    tf2.word_wrap = True
    
    for i, line in enumerate(content_lines):
        if i == 0:
            p = tf2.paragraphs[0]
        else:
            p = tf2.add_paragraph()
        p.text = line
        p.font.size = Pt(20)
        p.font.color.rgb = COLORS['dark']
        p.space_after = Pt(12)
    
    return slide

def add_two_column_slide(title, left_title, left_lines, right_title, right_lines):
    slide = prs.slides.add_slide(prs.slide_layouts[6])
    set_slide_bg(slide, COLORS['bg_light'])
    
    txBox = slide.shapes.add_textbox(Inches(0.8), Inches(0.5), Inches(11.7), Inches(1))
    tf = txBox.text_frame
    p = tf.paragraphs[0]
    p.text = title
    p.font.size = Pt(36)
    p.font.bold = True
    p.font.color.rgb = COLORS['bg_dark']
    
    txBox_left = slide.shapes.add_textbox(Inches(0.8), Inches(1.8), Inches(5.5), Inches(5.2))
    tf_left = txBox_left.text_frame
    tf_left.word_wrap = True
    
    p = tf_left.paragraphs[0]
    p.text = left_title
    p.font.size = Pt(24)
    p.font.bold = True
    p.font.color.rgb = COLORS['accent']
    
    for line in left_lines:
        p = tf_left.add_paragraph()
        p.text = line
        p.font.size = Pt(18)
        p.font.color.rgb = COLORS['dark']
        p.space_after = Pt(8)
    
    txBox_right = slide.shapes.add_textbox(Inches(7), Inches(1.8), Inches(5.5), Inches(5.2))
    tf_right = txBox_right.text_frame
    tf_right.word_wrap = True
    
    p = tf_right.paragraphs[0]
    p.text = right_title
    p.font.size = Pt(24)
    p.font.bold = True
    p.font.color.rgb = COLORS['accent']
    
    for line in right_lines:
        p = tf_right.add_paragraph()
        p.text = line
        p.font.size = Pt(18)
        p.font.color.rgb = COLORS['dark']
        p.space_after = Pt(8)
    
    return slide

# ========== 簡報內容 ==========

# 1. 封面
add_title_slide(
    "組織理論實務概論",
    "從古典到現代 · 理論與實踐的橋樑"
)

# 2. 為什麼要學組織理論？
add_content_slide(
    "為什麼要學組織理論？",
    [
        "✦ 理解組織運作的底層邏輯，不再凭感覺管理",
        "✦ 預見組織問題，提前佈局而非亡羊補牢",
        "✦ 設計更有效的組織結構，讓人才發揮最大價值",
        "✦ 在變革時代找到穩定的理論支撐",
        "",
        "一句話總結：組織理論是管理者的「X 光機」，",
        "讓你看穿表面，直視組織的骨架與血脈。",
    ]
)

# 3. 組織理論的演進
add_two_column_slide(
    "組織理論的演進歷程",
    "古典時期（1900s~1950s）",
    [
        "• 科學管理（泰勒）：標準化、效率至上",
        "• 官僚制（韋伯）：規則、層級、非人格化",
        "• 行政管理（費堯）：管理五職能",
        "• 核心假設：人是「經濟人」",
    ],
    "現代時期（1960s~今）",
    [
        "• 系統理論：組織是開放系統",
        "• 權變理論：沒有最好，只有最適合",
        "• 新制度理論：組織的合法性壓力",
        "• 核心假設：人是「社會人」、「複雜人」",
    ]
)

# 4. 古典組織理論
add_content_slide(
    "古典組織理論：效率的基石",
    [
        "泰勒科學管理四原則：",
        "  ① 科學研究工作方法，取代經驗法則",
        "  ② 科學選擇並訓練工人",
        "  ③ 與工人真誠合作，確保按科學方法做事",
        "  ④ 管理者與工人之間職責幾乎均分",
        "",
        "韋伯官僚制三權威類型：",
        "  ① 傳統權威：世襲、習俗",
        "  ② 魅力權威：領袖特質",
        "  ③ 法理權威：規則、制度（最理性）",
    ]
)

# 5. 人際關係學派
add_content_slide(
    "人際關係學派：發現「人」的價值",
    [
        "霍桑實驗（1924~1932）的革命性發現：",
        "  • 工廠照明不是影響效率的關鍵",
        "  • 工人的「社會需求」比薪水更重要",
        "  • 非正式組織對生產力有巨大影響",
        "",
        "梅約的人性假設：",
        "  • 人不是只追求金錢的「經濟人」",
        "  • 人是渴望歸屬感的「社會人」",
        "  • 管理者必須重視人際關係與團隊氛圍",
    ]
)

# 6. 系統理論
add_two_column_slide(
    "系統理論：組織是開放有機體",
    "封閉系統 vs 開放系統",
    [
        "封閉系統：",
        "• 自給自足、不與外界互動",
        "• 古典理論的假設",
        "• 現實中幾乎不存在",
        "",
        "開放系統：",
        "• 與環境持續互動",
        "• 輸入→轉換→輸出→回饋",
        "• 現代組織的真實寫照",
    ],
    "組織的子系統",
    [
        "• 技術子系統：生產設備、流程",
        "• 管理子系統：規劃、組織、領導",
        "• 社會子系統：文化、士氣、人際關係",
        "• 結構子系統：權責分配、溝通管道",
        "",
        "關鍵洞見：子系統之間相互影響，",
        "改一個會牽動全部。",
    ]
)

# 7. 權變理論
add_content_slide(
    "權變理論：沒有萬靈丹",
    [
        "核心主張：最佳組織方式取決於情境",
        "",
        "影響權變因素：",
        "  • 環境穩定性：穩定→機械式；動態→有機式",
        "  • 組織規模：小→扁平；大→層級",
        "  • 技術複雜度：標準化→官僚；創新→彈性",
        "  • 策略目標：低成本→效率導向；差異化→創新導向",
        "",
        "一句話記住：別問「哪個理論最好」，",
        "要問「這個情境下哪個最適合」。",
    ]
)

# 8. 組織結構設計
add_two_column_slide(
    "組織結構設計：五大類型",
    "效率導向",
    [
        "• 功能式結構：依專業分工",
        "  → 適合：單一產品、穩定市場",
        "  → 優點：專業深度、效率高",
        "  → 缺點：跨部門協調難",
        "",
        "• 事業部式結構：依產品/地區分組",
        "  → 適合：多產品、多市場",
        "  → 優點：靈活應變、責任明確",
        "  → 缺點：資源重複、本位主義",
    ],
    "創新導向",
    [
        "• 矩陣式結構：雙重權責線",
        "  → 適合：專案導向、複雜環境",
        "  → 優點：资源共享、彈性高",
        "  → 缺點：權責不清、溝通成本高",
        "",
        "• 團隊式結構：以團隊為核心",
        "  → 適合：創新研發、快速變化",
        "  → 優點：反應快、士氣高",
        "  → 缺點：角色模糊、依賴成員",
    ]
)

# 9. 組織文化
add_content_slide(
    "組織文化的隱形力量",
    [
        "沙因的三層文化模型：",
        "  ① 人工製品：可見的符號、儀式、佈置",
        "  ② 信奉的價值：策略、目標、哲學",
        "  ③ 基本假設：潛意識的信念、感知、思考",
        "",
        "文化的力量：",
        "  • 員工行為的隱形指南針",
        "  • 招聘與留才的篩選器",
        "  • 創新或僵化的催化劑",
        "",
        "警句：文化會把策略當早餐吃掉（Peter Drucker）",
    ]
)

# 10. 領導與權力
add_content_slide(
    "領導與權力：組織的靈魂",
    [
        "領導理论演進：",
        "  • 特質理論：天生的領袖（已被質疑）",
        "  • 行為理論：任務導向 vs 關係導向",
        "  • 權變理論：情境決定領導風格",
        "  • 轉型領導：激發潛能、超越自我",
        "",
        "組織中的權力來源：",
        "  • 法定權：職位賦予的正式權力",
        "  • 獎賞權：給予獎勵的能力",
        "  • 專家權：知識與技能",
        "  • 參照權：個人魅力與認同",
    ]
)

# 11. 組織變革
add_content_slide(
    "組織變革：在動態中求生存",
    [
        "科特的變革八步驟：",
        "  ① 建立緊迫感  ② 組建領導團隊",
        "  ③ 發展願景策略  ④ 溝通變革願景",
        "  ⑤ 授權行動  ⑥ 創造短期成效",
        "  ⑦ 巩固成果並深化變革  ⑧ 將新方法植入文化",
        "",
        "變革的阻力來源：",
        "  • 個人：習慣、恐懼、誤解",
        "  • 組織：結構慣性、群體壓力、利益衝突",
        "",
        "關鍵：變革不是技術問題，是人性問題。",
    ]
)

# 12. AI 時代的組織理論新挑戰
add_content_slide(
    "AI 時代：組織理論的新疆界",
    [
        "2026 年組織面臨的三大轉變：",
        "",
        "⑴ 從層級到網路：AI 扁平化組織",
        "  → 中間管理層被 AI 取代，決策權下放",
        "",
        "⑵ 從固定到流動：敏捷組織成為常態",
        "  → 跨功能團隊、專案制、零工經濟",
        "",
        "⑶ 從經驗到數據：AI 輔助決策",
        "  → 人機協作、預測分析、即時回饋",
        "",
        "McKinsey 2026 報告：",
        "  只有 20% 的組織真正做好 AI 轉型準備",
    ]
)

# 13. 結語
add_title_slide(
    "理論是指南針，實踐是旅程",
    "掌握組織理論，成為更睿智的管理者"
)

# 儲存
output_path = os.path.expanduser("~/Desktop/組織理論實務概論.pptx")
prs.save(output_path)
print(f"✅ 簡報已儲存：{output_path}")
print(f"📄 共 {len(prs.slides)} 頁")
