import random
import tkinter as tk
from tkinter import ttk, messagebox
from tkinter import simpledialog

# 唐诗数据库，自行追加到300首
tang_poems = [
    {
        "title": "静夜思",
        "author": "李白",
        "content": "床前明月光，疑是地上霜。\n举头望明月，低头思故乡。"
    },
    {
        "title": "春晓",
        "author": "孟浩然",
        "content": "春眠不觉晓，处处闻啼鸟。\n夜来风雨声，花落知多少。"
    },
    {
        "title": "登鹳雀楼",
        "author": "王之涣",
        "content": "白日依山尽，黄河入海流。\n欲穷千里目，更上一层楼。"
    },
    {
        "title": "相思",
        "author": "王维",
        "content": "红豆生南国，春来发几枝。\n愿君多采撷，此物最相思。"
    },
    {
        "title": "咏鹅",
        "author": "骆宾王",
        "content": "鹅，鹅，鹅，曲项向天歌。\n白毛浮绿水，红掌拨清波。"
    },
    {
        "title": "江雪",
        "author": "柳宗元",
        "content": "千山鸟飞绝，万径人踪灭。\n孤舟蓑笠翁，独钓寒江雪。"
    },
    {
        "title": "望庐山瀑布",
        "author": "李白",
        "content": "日照香炉生紫烟，遥看瀑布挂前川。\n飞流直下三千尺，疑是银河落九天。"
    },
    {
        "title": "清明",
        "author": "杜牧",
        "content": "清明时节雨纷纷，路上行人欲断魂。\n借问酒家何处有？牧童遥指杏花村。"
    }
]


class TangPoemApp:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗三百首")
        self.root.geometry("620x480")
        self.root.resizable(False, False)

        # 顶部框架：按钮区域
        frame_top = tk.Frame(root, pady=10)
        frame_top.pack()

        tk.Button(frame_top, text="随机一首", width=10, command=self.random_poem).grid(row=0, column=0, padx=6)
        tk.Button(frame_top, text="诗人检索", width=10, command=self.search_author).grid(row=0, column=1, padx=6)
        tk.Button(frame_top, text="诗词目录", width=10, command=self.show_list).grid(row=0, column=2, padx=6)

        # 标题显示
        self.label_title = tk.Label(root, font=("SimSun", 16, "bold"), fg="#8B2323")
        self.label_title.pack(pady=8)

        # 诗文显示文本框
        self.text_box = tk.Text(root, font=("SimSun", 14), width=45, height=14)
        self.text_box.pack(pady=5)
        self.text_box.config(state=tk.DISABLED)

    def clear_text(self):
        """清空文本框"""
        self.text_box.config(state=tk.NORMAL)
        self.text_box.delete(1.0, tk.END)
        self.text_box.config(state=tk.DISABLED)
        self.label_title.config(text="")

    def print_poem(self, poem):
        """展示单首诗词"""
        self.clear_text()
        self.label_title.config(text=f"【{poem['title']}】 {poem['author']}")
        self.text_box.config(state=tk.NORMAL)
        self.text_box.insert(tk.END, poem["content"])
        self.text_box.config(state=tk.DISABLED)

    def random_poem(self):
        """随机诗词"""
        p = random.choice(tang_poems)
        self.print_poem(p)

    def search_author(self):
        """按诗人查找"""
        writer = simpledialog.askstring("搜索诗人", "请输入诗人姓名：")
        if not writer:
            return
        res = [p for p in tang_poems if writer in p["author"]]
        if not res:
            messagebox.showinfo("提示", "未找到该诗人作品！")
            return
        # 找到第一首展示
        self.print_poem(res[0])
        if len(res) > 1:
            messagebox.showinfo("多条结果", f"共找到{len(res)}首，先展示第一首")

    def show_list(self):
        """展示全部目录"""
        self.clear_text()
        self.label_title.config(text="诗词目录")
        self.text_box.config(state=tk.NORMAL)
        for idx, p in enumerate(tang_poems, 1):
            self.text_box.insert(tk.END, f"{idx}. {p['title']} —— {p['author']}\n")
        self.text_box.config(state=tk.DISABLED)


if __name__ == "__main__":
    window = tk.Tk()
    app = TangPoemApp(window)
    window.mainloop()