import tkinter as tk
from tkinter import ttk, messagebox
import random

# 精简版唐诗三百首数据（示例数据，可自行扩展）
tang_poems = [
    {
        "title": "静夜思",
        "author": "李白",
        "content": "床前明月光，疑是地上霜。举头望明月，低头思故乡。"
    },
    {
        "title": "登鹳雀楼",
        "author": "王之涣",
        "content": "白日依山尽，黄河入海流。欲穷千里目，更上一层楼。"
    },
    {
        "title": "春晓",
        "author": "孟浩然",
        "content": "春眠不觉晓，处处闻啼鸟。夜来风雨声，花落知多少。"
    },
    {
        "title": "相思",
        "author": "王维",
        "content": "红豆生南国，春来发几枝。愿君多采撷，此物最相思。"
    },
    {
        "title": "江雪",
        "author": "柳宗元",
        "content": "千山鸟飞绝，万径人踪灭。孤舟蓑笠翁，独钓寒江雪。"
    },
    {
        "title": "赋得古原草送别",
        "author": "白居易",
        "content": "离离原上草，一岁一枯荣。野火烧不尽，春风吹又生。远芳侵古道，晴翠接荒城。又送王孙去，萋萋满别情。"
    },
    {
        "title": "凉州词",
        "author": "王翰",
        "content": "葡萄美酒夜光杯，欲饮琵琶马上催。醉卧沙场君莫笑，古来征战几人回？"
    }
]


class TangPoemApp:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗三百首")
        self.root.geometry("600x500")  # 设置窗口大小
        self.root.resizable(True, True)  # 允许调整窗口大小

        # 设置字体（提升显示效果）
        self.font_title = ("SimHei", 16, "bold")
        self.font_content = ("KaiTi", 12)

        # 创建界面组件
        self.create_widgets()

    def create_widgets(self):
        # 1. 标题栏
        title_label = tk.Label(
            self.root,
            text="唐诗三百首",
            font=self.font_title,
            fg="#8B4513"
        )
        title_label.pack(pady=10)

        # 2. 搜索区域
        search_frame = tk.Frame(self.root)
        search_frame.pack(fill=tk.X, padx=20, pady=5)

        tk.Label(search_frame, text="搜索：").pack(side=tk.LEFT)

        self.search_var = tk.StringVar()
        search_entry = tk.Entry(
            search_frame, textvariable=self.search_var, width=30)
        search_entry.pack(side=tk.LEFT, padx=5)

        search_btn = tk.Button(search_frame, text="搜索",
                               command=self.search_poem)
        search_btn.pack(side=tk.LEFT, padx=5)

        # 3. 内容展示区域
        self.poem_text = tk.Text(
            self.root,
            font=self.font_content,
            wrap=tk.WORD,
            bg="#F5F5DC",
            relief=tk.FLAT,
            padx=10,
            pady=10
        )
        self.poem_text.pack(fill=tk.BOTH, expand=True, padx=20, pady=10)

        # 禁止编辑文本框
        self.poem_text.config(state=tk.DISABLED)

        # 4. 功能按钮区域
        btn_frame = tk.Frame(self.root)
        btn_frame.pack(fill=tk.X, padx=20, pady=10)

        random_btn = tk.Button(btn_frame, text="随机查看",
                               command=self.show_random_poem)
        random_btn.pack(side=tk.LEFT, padx=5, expand=True)

        clear_btn = tk.Button(btn_frame, text="清空内容",
                              command=self.clear_content)
        clear_btn.pack(side=tk.LEFT, padx=5, expand=True)

        exit_btn = tk.Button(btn_frame, text="退出", command=self.root.quit)
        exit_btn.pack(side=tk.LEFT, padx=5, expand=True)

    def show_poem(self, poem):
        """展示单首唐诗"""
        # 启用文本框编辑
        self.poem_text.config(state=tk.NORMAL)
        # 清空原有内容
        self.poem_text.delete(1.0, tk.END)

        # 格式化显示唐诗
        content = f"《{poem['title']}》\n{poem['author']}\n\n{poem['content']}"
        self.poem_text.insert(tk.END, content)

        # 禁用编辑
        self.poem_text.config(state=tk.DISABLED)

    def show_random_poem(self):
        """随机显示一首唐诗"""
        poem = random.choice(tang_poems)
        self.show_poem(poem)

    def search_poem(self):
        """搜索唐诗（支持标题/作者模糊匹配）"""
        keyword = self.search_var.get().strip()
        if not keyword:
            messagebox.showinfo("提示", "请输入搜索关键词！")
            return

        # 查找匹配的唐诗
        matched_poems = []
        for poem in tang_poems:
            if keyword in poem["title"] or keyword in poem["author"]:
                matched_poems.append(poem)

        if not matched_poems:
            messagebox.showinfo("提示", f"未找到包含「{keyword}」的唐诗")
            return

        # 显示第一个匹配结果
        self.show_poem(matched_poems[0])

    def clear_content(self):
        """清空文本框内容"""
        self.poem_text.config(state=tk.NORMAL)
        self.poem_text.delete(1.0, tk.END)
        self.poem_text.config(state=tk.DISABLED)
        self.search_var.set("")


if __name__ == "__main__":
    root = tk.Tk()
    app = TangPoemApp(root)
    root.mainloop()
