import tkinter as tk
from tkinter import ttk, messagebox
import json
import os

# 数据文件
DATA_FILE = "study_plan.json"

class StudyPlanGUI:
    def __init__(self, root):
        self.root = root
        self.root.title("Python每日学习计划表")
        self.root.geometry("600x500")

        # 存储任务列表
        self.task_list = self.load_data()

        # 构建界面
        self.create_widgets()
        self.refresh_tree()

    # 加载本地保存的计划
    def load_data(self):
        if os.path.exists(DATA_FILE):
            with open(DATA_FILE, "r", encoding="utf-8") as f:
                return json.load(f)
        return []

    # 保存计划到本地
    def save_data(self):
        with open(DATA_FILE, "w", encoding="utf-8") as f:
            json.dump(self.task_list, f, ensure_ascii=False, indent=2)

    # 创建界面组件
    def create_widgets(self):
        # 输入区域框架
        frame_input = tk.Frame(self.root, pady=10)
        frame_input.pack(fill="x", padx=20)

        tk.Label(frame_input, text="时间段：").grid(row=0, column=0, sticky="w")
        self.var_time = tk.Entry(frame_input, width=15)
        self.var_time.grid(row=0, column=1, padx=5)

        tk.Label(frame_input, text="学习内容：").grid(row=0, column=2, sticky="w", padx=(10,0))
        self.var_content = tk.Entry(frame_input, width=25)
        self.var_content.grid(row=0, column=3, padx=5)

        # 按钮区
        frame_btn = tk.Frame(self.root, pady=5)
        frame_btn.pack()
        ttk.Button(frame_btn, text="添加计划", command=self.add_task).grid(row=0, column=0, padx=5)
        ttk.Button(frame_btn, text="标记完成", command=self.finish_task).grid(row=0, column=1, padx=5)
        ttk.Button(frame_btn, text="删除选中", command=self.del_task).grid(row=0, column=2, padx=5)
        ttk.Button(frame_btn, text="清空全部", command=self.clear_all).grid(row=0, column=3, padx=5)

        # 表格展示计划
        frame_table = tk.Frame(self.root, pady=10)
        frame_table.pack(fill="both", expand=True, padx=20)

        cols = ("time", "content", "status")
        self.tree = ttk.Treeview(frame_table, columns=cols, show="headings")
        self.tree.heading("time", text="学习时段")
        self.tree.heading("content", text="学习内容")
        self.tree.heading("status", text="完成状态")
        self.tree.column("time", width=120)
        self.tree.column("content", width=300)
        self.tree.column("status", width=100)

        scroll = ttk.Scrollbar(frame_table, orient="vertical", command=self.tree.yview)
        self.tree.configure(yscrollcommand=scroll.set)
        self.tree.pack(side="left", fill="both", expand=True)
        scroll.pack(side="right", fill="y")

    # 刷新表格数据
    def refresh_tree(self):
        for item in self.tree.get_children():
            self.tree.delete(item)
        for idx, task in enumerate(self.task_list):
            self.tree.insert("", "end", iid=idx, values=(
                task["time"],
                task["content"],
                "✅ 已完成" if task["finish"] else "⏳ 未完成"
            ))

    # 添加任务
    def add_task(self):
        time_text = self.var_time.get().strip()
        content_text = self.var_content.get().strip()
        if not time_text or not content_text:
            messagebox.showwarning("提示", "时段和学习内容不能为空！")
            return
        self.task_list.append({
            "time": time_text,
            "content": content_text,
            "finish": False
        })
        self.save_data()
        self.refresh_tree()
        # 清空输入框
        self.var_time.delete(0, tk.END)
        self.var_content.delete(0, tk.END)

    # 标记完成
    def finish_task(self):
        select = self.tree.selection()
        if not select:
            messagebox.showinfo("提示", "请先选中一行计划")
            return
        idx = int(select[0])
        self.task_list[idx]["finish"] = True
        self.save_data()
        self.refresh_tree()

    # 删除单条
    def del_task(self):
        select = self.tree.selection()
        if not select:
            return
        idx = int(select[0])
        del self.task_list[idx]
        self.save_data()
        self.refresh_tree()

    # 清空所有计划
    def clear_all(self):
        if messagebox.askyesno("确认", "确定要清空所有学习计划吗？不可恢复！"):
            self.task_list = []
            self.save_data()
            self.refresh_tree()

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