import tkinter as tk
from tkinter import ttk, messagebox

# 模拟唐诗数据（实际应用中可以从JSON或数据库加载）
POEMS_DATA = [
    {"title": "静夜思", "author": "李白", "content": "床前明月光，\n疑是地上霜。\n举头望明月，\n低头思故乡。"},
    {"title": "春晓", "author": "孟浩然", "content": "春眠不觉晓，\n处处闻啼鸟。\n夜来风雨声，\n花落知多少。"},
    {"title": "登鹳雀楼", "author": "王之涣", "content": "白日依山尽，\n黄河入海流。\n欲穷千里目，\n更上一层楼。"},
    {"title": "江雪", "author": "柳宗元", "content": "千山鸟飞绝，\n万径人踪灭。\n孤舟蓑笠翁，\n独钓寒江雪。"},
    {"title": "望庐山瀑布", "author": "李白",
        "content": "日照香炉生紫烟，\n遥看瀑布挂前川。\n飞流直下三千尺，\n疑是银河落九天。"},
    {"title": "九月九日忆山东兄弟", "author": "王维",
        "content": "独在异乡为异客，\n每逢佳节倍思亲。\n遥知兄弟登高处，\n遍插茱萸少一人。"}
]


class TangPoetryApp:
    def __init__(self, root):
        self.root = root
        self.root.title("唐诗三百首 - 现代雅致版")
        self.root.geometry("800x600")
        self.root.configure(bg="#f5f5dc")  # 米黄色背景（宣纸感）

        self.setup_ui()
        self.load_list(POEMS_DATA)

    def setup_ui(self):
        # --- 顶部搜索栏 ---
        search_frame = tk.Frame(self.root, bg="#f5f5dc", pady=10)
        search_frame.pack(fill="x")

        tk.Label(search_frame, text="搜索诗词/诗人:", bg="#f5f5dc",
                 font=("楷体", 12)).pack(side="left", padx=10)
        self.search_var = tk.StringVar()
        self.search_var.trace("w", self.on_search)  # 输入即搜索
        search_entry = tk.Entry(
            search_frame, textvariable=self.search_var, font=("微软雅黑", 11), width=30)
        search_entry.pack(side="left", padx=5)

        # --- 主体布局 ---
        main_container = tk.PanedWindow(
            self.root, orient="horizontal", bg="#dcdcdc", sashwidth=4)
        main_container.pack(expand=True, fill="both")

        # 左侧列表框 (带滚动条)
        list_frame = tk.Frame(main_container, bg="white")
        self.poem_listbox = tk.Listbox(
            list_frame,
            font=("楷体", 14),
            bg="#faf9f0",
            fg="#333",
            selectbackground="#8b4513",
            borderwidth=0
        )
        scrollbar = tk.Scrollbar(
            list_frame, orient="vertical", command=self.poem_listbox.yview)
        self.poem_listbox.config(yscrollcommand=scrollbar.set)

        self.poem_listbox.pack(side="left", expand=True, fill="both")
        scrollbar.pack(side="right", fill="y")
        self.poem_listbox.bind("<<ListboxSelect>>", self.show_poem)

        main_container.add(list_frame, width=250)

        # 右侧内容展示区
        content_frame = tk.Frame(main_container, bg="white", padx=40, pady=40)
        self.title_label = tk.Label(content_frame, text="请选择一首诗", font=(
            "华文新魏", 28, "bold"), bg="white", fg="#2c3e50")
        self.title_label.pack(pady=(0, 10))

        self.author_label = tk.Label(content_frame, text="", font=(
            "楷体", 16), bg="white", fg="#7f8c8d")
        self.author_label.pack(pady=(0, 30))

        self.content_text = tk.Text(
            content_frame,
            font=("楷体", 20),
            bg="white",
            fg="#2c3e50",
            wrap="word",
            relief="flat",
            spacing1=10,  # 行间距
            padx=20
        )
        self.content_text.pack(expand=True, fill="both")
        self.content_text.config(state="disabled")  # 禁止编辑

        main_container.add(content_frame)

    def load_list(self, data):
        """加载列表数据"""
        self.poem_listbox.delete(0, tk.END)
        self.current_data = data
        for poem in data:
            self.poem_listbox.insert(
                tk.END, f" {poem['title']} - {poem['author']}")

    def on_search(self, *args):
        """实时搜索过滤"""
        query = self.search_var.get().strip().lower()
        if not query:
            self.load_list(POEMS_DATA)
            return

        filtered = [
            p for p in POEMS_DATA
            if query in p['title'].lower() or query in p['author'].lower()
        ]
        self.load_list(filtered)

    def show_poem(self, event):
        """在右侧显示选中的诗词详情"""
        selection = self.poem_listbox.curselection()
        if not selection:
            return

        index = selection[0]
        poem = self.current_data[index]

        # 更新标题和作者
        self.title_label.config(text=poem['title'])
        self.author_label.config(text=f"〔唐〕{poem['author']}")

        # 更新内容
        self.content_text.config(state="normal")
        self.content_text.delete("1.0", tk.END)
        self.content_text.insert("1.0", poem['content'])
        self.content_text.tag_configure("center", justify='center')
        self.content_text.tag_add("center", "1.0", "end")
        self.content_text.config(state="disabled")


if __name__ == "__main__":
    root = tk.Tk()
    # 尝试设置中文字体，如果系统没有则回退
    app = TangPoetryApp(root)
    root.mainloop()
