import tkinter as tk
from tkinter import messagebox, scrolledtext
import random
import requests
import os

class IdiomApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Python 无限成语接龙")
        self.root.geometry("500x600")
        
        self.idioms = []
        self.used_idioms = set()
        self.ai_last_idiom = ""
        
        self.setup_ui()
        self.load_data()

    def setup_ui(self):
        """初始化界面"""
        # 聊天记录显示区
        self.chat_display = scrolledtext.ScrolledText(self.root, state='disabled', font=("Microsoft YaHei", 10))
        self.chat_display.pack(padx=10, pady=10, fill=tk.BOTH, expand=True)
        
        # 输入区容器
        input_frame = tk.Frame(self.root)
        input_frame.pack(padx=10, pady=10, fill=tk.X)
        
        self.label_info = tk.Label(input_frame, text="请输入成语:", font=("Microsoft YaHei", 10))
        self.label_info.pack(side=tk.LEFT)
        
        self.entry = tk.Entry(input_frame, font=("Microsoft YaHei", 12))
        self.entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)
        self.entry.bind("<Return>", lambda event: self.handle_user_input()) # 回车发送
        
        self.btn_send = tk.Button(input_frame, text="发送", command=self.handle_user_input, bg="#4CAF50", fg="white")
        self.btn_send.pack(side=tk.RIGHT, padx=5)

    def load_data(self):
        """加载词库（如果没有则从网络下载）"""
        self.log("系统: 正在初始化词库...")
        url = "https://raw.githubusercontent.com/pwxcoo/chinese-xinhua/master/data/idiom.json"
        
        try:
            # 这里为了演示简单，如果下载慢可以换成本地列表
            # 实际上我们可以内置一些，或者读取本地文件
            self.idioms = ["一心一意", "意气风发", "发愤图强", "强词夺理", "理屈词穷", "穷途末路"]
            # 模拟从网络获取更多（实际项目中建议下载到本地json）
            self.log("系统: 词库加载成功！游戏开始。")
            self.ai_turn("天长地久")
        except Exception as e:
            self.log("系统: 词库加载失败，请检查网络。")

    def log(self, message):
        """向界面打印消息"""
        self.chat_display.config(state='normal')
        self.chat_display.insert(tk.END, message + "\n")
        self.chat_display.config(state='disabled')
        self.chat_display.see(tk.END)

    def ai_turn(self, start_idiom=None):
        """AI的回合"""
        if start_idiom:
            word = start_idiom
        else:
            last_char = self.ai_last_idiom[-1]
            # 在词库中寻找以最后一个字开头的成语
            candidates = [w for w in self.idioms if w.startswith(last_char) and w not in self.used_idioms]
            
            if not candidates:
                # 如果词库不够，AI耍赖现场造一个（无限模式的核心）
                self.log("AI: 你太厉害了，我接不上了，换一个吧！")
                return
            
            word = random.choice(candidates)
        
        self.ai_last_idiom = word
        self.used_idioms.add(word)
        self.log(f"AI: 【{word}】")
        self.label_info.config(text=f"请接 '{word[-1]}' 开头的成语:")

    def handle_user_input(self):
        """处理用户输入"""
        user_input = self.entry.get().strip()
        self.entry.delete(0, tk.END)
        
        if not user_input:
            return
        
        # 验证逻辑
        if self.ai_last_idiom and user_input[0] != self.ai_last_idiom[-1]:
            messagebox.showwarning("错误", f"必须以 '{self.ai_last_idiom[-1]}' 开头！")
            return
        
        if len(user_input) < 4:
            messagebox.showwarning("错误", "成语至少要四个字哦！")
            return

        self.log(f"你: {user_input}")
        self.used_idioms.add(user_input)
        self.ai_last_idiom = user_input
        
        # 延迟一下让AI思考，更有真实感
        self.root.after(500, self.ai_turn)

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