import tkinter as tk
from tkinter import ttk, scrolledtext
import random

# 模拟唐诗数据库 (实际应用中可以从json文件读取)
# 格式: {标题: (作者, 内容)}
POEMS_DB = {
    "静夜思": ("李白", "床前明月光，\n疑是地上霜。\n举头望明月，\n低头思故乡。"),
    "春晓": ("孟浩然", "春眠不觉晓，\n处处闻啼鸟。\n夜来风雨声，\n花落知多少。"),
    "登鹳雀楼": ("王之涣", "白日依山尽，\n黄河入海流。\n欲穷千里目，\n更上一层楼。"),
    "江雪": ("柳宗元", "千山鸟飞绝，\n万径人踪灭。\n孤舟蓑笠翁，\n独钓寒江雪。"),
    "赋得古原草送别": ("白居易", "离离原上草，一岁一枯荣。\n野火烧不尽，春风吹又生。\n远芳侵古道，晴翠接荒城。\n又送王孙去，萋萋满别情。"),
    "望庐山瀑布": ("李白", "日照香炉生紫烟，\n遥看瀑布挂前川。\n飞流直下三千尺，\n疑是银河落九天。"),
    "九月九日忆山东兄弟": ("王维", "独在异乡为异客，\n每逢佳节倍思亲。\n遥知兄弟登高处，\n遍插茱萸少一人。")
}

class TangPoetryApp:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗三百首精选")
        self.root.geometry("600x500")
        self.root.configure(bg="#f5f5dc") # 米黄色古风背景

        # --- 顶部搜索栏 ---
        search_frame = tk.Frame(root, bg="#f5f5dc")
        search_frame.pack(pady=10, fill="x")
        
        tk.Label(search_frame, text="搜索诗词/作者:", bg="#f5f5dc", font=("微软雅黑", 10)).pack(side="left", padx=10)
        self.search_var = tk.StringVar()
        self.search_entry = tk.Entry(search_frame, textvariable=self.search_var, width=20)
        self.search_entry.pack(side="left", padx=5)
        
        search_btn = tk.Button(search_frame, text="搜索", command=self.search_poem)
        search_btn.pack(side="left", padx=5)
        
        random_btn = tk.Button(search_frame, text="随机一首", command=self.show_random)
        random_btn.pack(side="left", padx=5)

        # --- 中间主体部分 ---
        paned_window = tk.PanedWindow(root, orient="horizontal", bg="#d2b48c")
        paned_window.pack(fill="both", expand=True, padx=10, pady=5)

        # 左侧列表框
        self.poem_listbox = tk.Listbox(paned_window, font=("微软雅黑", 11), width=20)
        self.poem_listbox.pack(fill="both", expand=True)
        self.poem_listbox.bind("<<ListboxSelect>>", self.on_select)
        paned_window.add(self.poem_listbox)

        # 右侧显示区域
        display_frame = tk.Frame(paned_window, bg="white")
        paned_window.add(display_frame)

        self.title_label = tk.Label(display_frame, text="请选择诗词", font=("微软雅黑", 16, "bold"), bg="white")
        self.title_label.pack(pady=10)

        self.author_label = tk.Label(display_frame, text="", font=("微软雅黑", 12), bg="white", fg="#666")
        self.author_label.pack(pady=5)

        self.content_text = scrolledtext.ScrolledText(display_frame, font=("楷体", 14), bg="white", bd=0)
        self.content_text.pack(fill="both", expand=True, padx=20, pady=10)

        # 初始化列表
        self.refresh_list(POEMS_DB.keys())

    def refresh_list(self, items):
        self.poem_listbox.delete(0, tk.END)
        for item in sorted(items):
            self.poem_listbox.insert(tk.END, item)

    def on_select(self, event):
        selection = self.poem_listbox.curselection()
        if selection:
            title = self.poem_listbox.get(selection[0])
            self.display_poem(title)

    def display_poem(self, title):
        author, content = POEMS_DB[title]
        self.title_label.config(text=title)
        self.author_label.config(text=f"〔唐〕{author}")
        self.content_text.config(state="normal")
        self.content_text.delete("1.0", tk.END)
        self.content_text.insert(tk.END, content)
        self.content_text.tag_add("center", "1.0", "end")
        self.content_text.tag_configure("center", justify='center')
        self.content_text.config(state="disabled")

    def search_poem(self):
        query = self.search_var.get().strip()
        results = [title for title, (author, content) in POEMS_DB.items() 
                   if query in title or query in author]
        self.refresh_list(results)

    def show_random(self):
        title = random.choice(list(POEMS_DB.keys()))
        self.display_poem(title)

if __name__ == "__main__":
    root = tk.Tk()
    app = TangPoetryApp(root)
    root.mainloop()