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

# 配置基础参数
WEEK_DAYS = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
PERIODS = ["第1节", "第2节", "第3节", "第4节", "第5节", "第6节", "第7节", "第8节"]
FILE_NAME = "schedule.json"

class ScheduleApp:
    def __init__(self, root):
        self.root = root
        self.root.title("个人课程表")
        self.root.geometry("920x520")
        self.root.resizable(False, False)

        # 存储课表数据: [节次][星期] = 课程字符串
        self.schedule_data = [["" for _ in range(7)] for _ in range(8)]
        self.load_data()

        # 表头
        self.table_frame = tk.Frame(root)
        self.table_frame.pack(padx=10, pady=10)

        # 星期表头
        tk.Label(self.table_frame, text="节次\\星期", width=12, bg="#cccccc", relief=tk.GROOVE, font=("微软雅黑", 10, "bold")).grid(row=0, column=0)
        for col, day in enumerate(WEEK_DAYS):
            tk.Label(self.table_frame, text=day, width=12, bg="#cccccc", relief=tk.GROOVE, font=("微软雅黑", 10, "bold")).grid(row=0, column=col+1)

        # 单元格二维数组
        self.cells = []
        for row, period in enumerate(PERIODS):
            row_cells = []
            # 左侧节次标签
            tk.Label(self.table_frame, text=period, width=12, bg="#eeeeee", relief=tk.GROOVE, font=("微软雅黑", 9)).grid(row=row+1, column=0)
            for col in range(7):
                txt = tk.Text(self.table_frame, width=12, height=3, font=("微软雅黑", 9))
                txt.grid(row=row+1, column=col+1)
                txt.insert(1.0, self.schedule_data[row][col])
                # 双击绑定编辑事件
                txt.bind("<Double-Button-1>", lambda e, r=row, c=col: self.edit_cell(r, c))
                row_cells.append(txt)
            self.cells.append(row_cells)

        # 按钮区域
        btn_frame = tk.Frame(root)
        btn_frame.pack(pady=5)
        tk.Button(btn_frame, text="保存课表", command=self.save_data, width=10).grid(row=0, column=0, padx=8)
        tk.Button(btn_frame, text="清空选中单元格", command=self.clear_single, width=12).grid(row=0, column=1, padx=8)
        tk.Button(btn_frame, text="一键清空全部", command=self.clear_all, width=10).grid(row=0, column=2, padx=8)

    def edit_cell(self, row, col):
        """双击弹窗编辑课程"""
        old_text = self.schedule_data[row][col]
        new_text = simpledialog.askstring("编辑课程",
                                          f"填写{PERIODS[row]} {WEEK_DAYS[col]}课程\n格式示例：语文\n张老师\n302教室",
                                          initialvalue=old_text)
        if new_text is not None:
            self.schedule_data[row][col] = new_text
            self.cells[row][col].delete(1.0, tk.END)
            self.cells[row][col].insert(1.0, new_text)

    def save_data(self):
        """保存到json文件"""
        with open(FILE_NAME, "w", encoding="utf-8") as f:
            json.dump(self.schedule_data, f, ensure_ascii=False, indent=2)
        messagebox.showinfo("提示", "课表已保存！")

    def load_data(self):
        """读取本地文件"""
        if os.path.exists(FILE_NAME):
            try:
                with open(FILE_NAME, "r", encoding="utf-8") as f:
                    self.schedule_data = json.load(f)
            except:
                pass

    def clear_single(self):
        """清空最后一次点击的格子（简易版弹窗选择行列）"""
        try:
            r = int(simpledialog.askstring("输入节次", "请输入要清空的节次(1-8)")) - 1
            c = int(simpledialog.askstring("输入星期", "请输入星期几(1-7)")) - 1
            if 0 <= r < 8 and 0 <= c <7:
                self.schedule_data[r][c] = ""
                self.cells[r][c].delete(1.0, tk.END)
        except:
            messagebox.showerror("错误", "输入数字不正确")

    def clear_all(self):
        if messagebox.askyesno("确认", "确定要清空整张课表吗？此操作不可撤销"):
            for r in range(8):
                for c in range(7):
                    self.schedule_data[r][c] = ""
                    self.cells[r][c].delete(1.0, tk.END)

if __name__ == "__main__":
    main_root = tk.Tk()
    app = ScheduleApp(main_root)
    main_root.mainloop()