import tkinter as tk
from tkinter import ttk, messagebox
import sys

# --- 1. 历史数据层 ---
# 这里存储了朝代的基本信息，实际开发中可以从数据库或JSON文件读取
HISTORY_DATA = [
    {
        "name": "夏朝",
        "period": "约前2070年 - 约前1600年",
        "emperor": "大禹",
        "capital": "阳城",
        "color": "#8B4513",  # 褐色
        "desc": "中国史书中记载的第一个世袭制朝代。夏朝的建立标志着中国从原始社会过渡到奴隶社会。大禹治水的故事广为流传。"
    },
    {
        "name": "商朝",
        "period": "约前1600年 - 约前1046年",
        "emperor": "商汤",
        "capital": "殷",
        "color": "#A0522D",  # 赭色
        "desc": "中国历史上第二个朝代，以青铜器制造和甲骨文闻名。商朝时期，奴隶制文明高度发展。"
    },
    {
        "name": "西周",
        "period": "前1046年 - 前771年",
        "emperor": "周武王",
        "capital": "镐京",
        "color": "#CD853F",  # 秘鲁色
        "desc": "周武王牧野之战击败商朝建立。西周推行分封制和礼乐制度，奠定了中国传统文化的基础。"
    },
    {
        "name": "东周 (春秋战国)",
        "period": "前770年 - 前221年",
        "emperor": "周平王",
        "capital": "洛邑",
        "color": "#D2691E",  # 巧克力色
        "desc": "王室衰微，诸侯争霸。这一时期出现了“百家争鸣”的文化繁荣局面，孔子、老子等思想家辈出。"
    },
    {
        "name": "秦朝",
        "period": "前221年 - 前207年",
        "emperor": "秦始皇 (嬴政)",
        "capital": "咸阳",
        "color": "#000000",  # 黑色 (秦尚黑)
        "text_color": "#FFFFFF",
        "desc": "中国历史上第一个大一统的中央集权帝国。秦始皇统一了文字、度量衡和货币，修筑了万里长城。"
    },
    {
        "name": "西汉",
        "period": "前202年 - 8年",
        "emperor": "汉高祖 (刘邦)",
        "capital": "长安",
        "color": "#8B0000",  # 深红
        "text_color": "#FFFFFF",
        "desc": "汉朝是中国历史上一个极其重要的朝代，汉民族因此得名。汉武帝时期，国力强盛，开辟丝绸之路。"
    },
    {
        "name": "东汉",
        "period": "25年 - 220年",
        "emperor": "汉光武帝 (刘秀)",
        "capital": "洛阳",
        "color": "#DC143C",  # 绯红
        "text_color": "#FFFFFF",
        "desc": "光武中兴后，东汉延续了汉朝的统治。蔡伦改进了造纸术，对世界文明产生了深远影响。"
    },
    {
        "name": "三国",
        "period": "220年 - 280年",
        "emperor": "魏文帝/蜀汉/东吴",
        "capital": "洛阳/成都/建业",
        "color": "#4B0082",  # 靛蓝
        "text_color": "#FFFFFF",
        "desc": "东汉末年群雄逐鹿，形成了魏、蜀、吴三国鼎立的局面。《三国演义》使这段历史家喻户晓。"
    },
    {
        "name": "晋朝",
        "period": "265年 - 420年",
        "emperor": "晋武帝",
        "capital": "洛阳/建康",
        "color": "#556B2F",  # 暗橄榄绿
        "text_color": "#FFFFFF",
        "desc": "分为西晋和东晋。这一时期虽然政治动荡，但文化艺术（如王羲之的书法）取得了很高成就。"
    },
    {
        "name": "隋朝",
        "period": "581年 - 618年",
        "emperor": "隋文帝",
        "capital": "大兴 (长安)",
        "color": "#FFD700",  # 金色
        "desc": "结束了魏晋南北朝长期的分裂局面。隋炀帝开凿了京杭大运河，创立了科举制。"
    },
    {
        "name": "唐朝",
        "period": "618年 - 907年",
        "emperor": "唐高祖 (李渊)",
        "capital": "长安",
        "color": "#FF4500",  # 橙红
        "text_color": "#FFFFFF",
        "desc": "中国历史上的鼎盛时期，以开放和包容著称。唐诗是中国文学的瑰宝，长安是当时世界的中心。"
    },
    {
        "name": "宋朝",
        "period": "960年 - 1279年",
        "emperor": "宋太祖 (赵匡胤)",
        "capital": "开封/临安",
        "color": "#2F4F4F",  # 暗岩灰
        "text_color": "#FFFFFF",
        "desc": "经济和文化高度繁荣，四大发明中的活字印刷术、指南针均在此时期成熟应用。"
    },
    {
        "name": "元朝",
        "period": "1271年 - 1368年",
        "emperor": "元世祖 (忽必烈)",
        "capital": "大都 (北京)",
        "color": "#191970",  # 午夜蓝
        "text_color": "#FFFFFF",
        "desc": "中国历史上第一个由少数民族（蒙古族）建立的大一统帝国。疆域空前辽阔，行省制度沿用至今。"
    },
    {
        "name": "明朝",
        "period": "1368年 - 1644年",
        "emperor": "明太祖 (朱元璋)",
        "capital": "南京/北京",
        "color": "#B22222",  # 耐火砖红
        "text_color": "#FFFFFF",
        "desc": "最后一个由汉族建立的大一统王朝。郑和七下西洋，修筑了现存的明长城，修建了紫禁城。"
    },
    {
        "name": "清朝",
        "period": "1636年 - 1912年",
        "emperor": "清太宗 (皇太极)",
        "capital": "北京",
        "color": "#FFFF00",  # 黄色
        "desc": "中国最后一个封建帝制王朝。康乾盛世时期国力强盛，但也经历了晚清的屈辱历史，最终走向共和。"
    }
]

# --- 2. 界面逻辑层 ---


class HistoryApp:
    def __init__(self, root):
        self.root = root
        self.root.title("中华上下五千年 - 历史朝代演变")
        self.root.geometry("800x600")
        self.root.configure(bg="#f0f0f0")

        # 顶部标题
        self.header = tk.Frame(root, bg="#333", height=60)
        self.header.pack(fill=tk.X)
        self.header.pack_propagate(False)

        self.title_label = tk.Label(self.header, text="中国历史朝代发展概览", font=(
            "微软雅黑", 24, "bold"), bg="#333", fg="white")
        self.title_label.pack(pady=15)

        # 主体布局：左侧列表，右侧详情
        self.content_frame = tk.Frame(root, bg="#f0f0f0")
        self.content_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

        # --- 左侧列表 ---
        self.list_frame = tk.Frame(self.content_frame, width=200)
        self.list_frame.pack(side=tk.LEFT, fill=tk.Y, padx=(0, 10))

        # 使用 Canvas 和 Scrollbar 实现滚动列表
        self.canvas = tk.Canvas(
            self.list_frame, width=200, highlightthickness=0)
        self.scrollbar = ttk.Scrollbar(
            self.list_frame, orient="vertical", command=self.canvas.yview)
        self.scrollable_frame = tk.Frame(self.canvas)

        self.scrollable_frame.bind(
            "<Configure>",
            lambda e: self.canvas.configure(
                scrollregion=self.canvas.bbox("all"))
        )

        self.canvas.create_window(
            (0, 0), window=self.scrollable_frame, anchor="nw")
        self.canvas.configure(yscrollcommand=self.scrollbar.set)

        self.canvas.pack(side=tk.LEFT, fill=tk.Y)
        self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

        # 填充朝代按钮
        self.dynasty_buttons = []
        for i, data in enumerate(HISTORY_DATA):
            btn = tk.Button(
                self.scrollable_frame,
                text=data['name'],
                font=("微软雅黑", 12),
                bg="white",
                relief=tk.FLAT,
                pady=10,
                command=lambda d=data: self.update_details(d)
            )
            btn.pack(fill=tk.X, pady=2)
            self.dynasty_buttons.append(btn)

        # --- 右侧详情 ---
        self.detail_frame = tk.Frame(
            self.content_frame, bg="white", relief=tk.SUNKEN, bd=2)
        self.detail_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)

        # 详情内容组件
        self.lbl_dynasty_name = tk.Label(self.detail_frame, text="", font=(
            "微软雅黑", 28, "bold"), bg="white", anchor="w")
        self.lbl_dynasty_name.pack(fill=tk.X, padx=20, pady=(20, 10))

        self.lbl_period = tk.Label(self.detail_frame, text="", font=(
            "宋体", 14, "italic"), bg="white", fg="#555", anchor="w")
        self.lbl_period.pack(fill=tk.X, padx=20)

        self.lbl_emperor = tk.Label(self.detail_frame, text="", font=(
            "微软雅黑", 12), bg="white", anchor="w")
        self.lbl_emperor.pack(fill=tk.X, padx=20, pady=(10, 5))

        self.lbl_capital = tk.Label(self.detail_frame, text="", font=(
            "微软雅黑", 12), bg="white", anchor="w")
        self.lbl_capital.pack(fill=tk.X, padx=20)

        # 分隔线
        ttk.Separator(self.detail_frame, orient='horizontal').pack(
            fill='x', padx=20, pady=15)

        self.lbl_desc = tk.Label(self.detail_frame, text="", font=(
            "宋体", 14), bg="white", fg="#333", wraplength=500, justify=tk.LEFT, anchor="nw")
        self.lbl_desc.pack(fill=tk.BOTH, expand=True, padx=20, pady=10)

        # 默认显示第一个
        self.update_details(HISTORY_DATA[0])

    def update_details(self, data):
        # 更新文本信息
        self.lbl_dynasty_name.config(text=data['name'])
        self.lbl_period.config(text=f"时间：{data['period']}")
        self.lbl_emperor.config(text=f"开国皇帝：{data['emperor']}")
        self.lbl_capital.config(text=f"都城：{data['capital']}")
        self.lbl_desc.config(text=data['desc'])

        # 更新配色主题
        bg_color = data['color']
        text_color = data.get('text_color', 'black')  # 默认为黑色，除非指定

        self.lbl_dynasty_name.config(fg=bg_color)
        self.detail_frame.config(bg=bg_color)
        self.lbl_period.config(bg=bg_color)
        self.lbl_emperor.config(bg=bg_color)
        self.lbl_capital.config(bg=bg_color)
        self.lbl_desc.config(bg=bg_color)

        # 按钮高亮逻辑
        for btn in self.dynasty_buttons:
            if btn['text'] == data['name']:
                btn.config(bg=bg_color, fg=text_color)
            else:
                btn.config(bg="white", fg="black")


if __name__ == "__main__":
    root = tk.Tk()
    app = HistoryApp(root)
    root.mainloop()
