import tkinter as tk
from tkinter import ttk, messagebox
from datetime import date


class App35:
    """日々のプランナー"""

    def __init__(self, root):
        self.root = root
        self.root.title("デイリープランナー")
        self.root.geometry("540x520")
        self.root.minsize(540, 520)
        self.root.configure(bg="#f8f9fc")
        self._build_ui()

    def _build_ui(self):
        title_frame = tk.Frame(self.root, bg="#3776ab", pady=10)
        title_frame.pack(fill=tk.X)
        today = date.today()
        weekdays = ["月","火","水","木","金","土","日"]
        tk.Label(title_frame,
                 text=f"デイリープランナー  {today.strftime('%Y年%m月%d日')}（{weekdays[today.weekday()]}）",
                 font=("Noto Sans JP", 14, "bold"),
                 bg="#3776ab", fg="white").pack()

        notebook = ttk.Notebook(self.root)
        notebook.pack(fill=tk.BOTH, expand=True, padx=8, pady=8)

        # タブ: スケジュール
        sched_tab = tk.Frame(notebook, bg="#f8f9fc")
        notebook.add(sched_tab, text="⏰ スケジュール")
        self._build_schedule_tab(sched_tab)

        # タブ: やること
        todo_tab = tk.Frame(notebook, bg="#f8f9fc")
        notebook.add(todo_tab, text="✅ やること")
        self._build_todo_tab(todo_tab)

        # タブ: メモ
        memo_tab = tk.Frame(notebook, bg="#f8f9fc")
        notebook.add(memo_tab, text="📝 メモ")
        self._build_memo_tab(memo_tab)

    def _build_schedule_tab(self, parent):
        f = tk.Frame(parent, bg="#f8f9fc", padx=14, pady=10)
        f.pack(fill=tk.BOTH, expand=True)

        # 追加フォーム
        add_f = tk.Frame(f, bg="#f8f9fc")
        add_f.pack(fill=tk.X, pady=(0, 8))
        tk.Label(add_f, text="時刻:", bg="#f8f9fc").pack(side=tk.LEFT)
        self.time_entry = ttk.Entry(add_f, width=7, font=("Arial", 12))
        self.time_entry.insert(0, "09:00")
        self.time_entry.pack(side=tk.LEFT, padx=4)
        tk.Label(add_f, text="予定:", bg="#f8f9fc").pack(side=tk.LEFT)
        self.sched_entry = ttk.Entry(add_f, font=("Noto Sans JP", 11))
        self.sched_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=4)
        self.sched_entry.bind("<Return>", lambda e: self.add_schedule())
        ttk.Button(add_f, text="追加", command=self.add_schedule).pack(side=tk.LEFT)

        # リスト
        list_f = tk.Frame(f, bg="#f8f9fc")
        list_f.pack(fill=tk.BOTH, expand=True)
        self.sched_listbox = tk.Listbox(list_f, font=("Noto Sans JP", 11),
                                        bg="white", relief=tk.FLAT, height=10)
        self.sched_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        sb = ttk.Scrollbar(list_f, command=self.sched_listbox.yview)
        self.sched_listbox.configure(yscrollcommand=sb.set)
        sb.pack(side=tk.RIGHT, fill=tk.Y)

        ttk.Button(f, text="選択削除", command=self.delete_schedule).pack(anchor="e", pady=(4, 0))

    def add_schedule(self):
        t = self.time_entry.get().strip()
        s = self.sched_entry.get().strip()
        if not s:
            return
        self.sched_listbox.insert(tk.END, f"{t}  {s}")
        self.sched_entry.delete(0, tk.END)

    def delete_schedule(self):
        sel = self.sched_listbox.curselection()
        if sel:
            self.sched_listbox.delete(sel[0])

    def _build_todo_tab(self, parent):
        f = tk.Frame(parent, bg="#f8f9fc", padx=14, pady=10)
        f.pack(fill=tk.BOTH, expand=True)
        self.todo_tasks = []

        add_f = tk.Frame(f, bg="#f8f9fc")
        add_f.pack(fill=tk.X, pady=(0, 8))
        self.todo_entry = ttk.Entry(add_f, font=("Noto Sans JP", 12))
        self.todo_entry.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=(0, 6))
        self.todo_entry.bind("<Return>", lambda e: self.add_todo())
        ttk.Button(add_f, text="追加", command=self.add_todo).pack(side=tk.LEFT)

        self.todo_listbox = tk.Listbox(f, font=("Noto Sans JP", 11),
                                       bg="white", relief=tk.FLAT, height=10,
                                       selectmode=tk.SINGLE)
        self.todo_listbox.pack(fill=tk.BOTH, expand=True)

        btn_f = tk.Frame(f, bg="#f8f9fc")
        btn_f.pack(fill=tk.X, pady=(4, 0))
        ttk.Button(btn_f, text="完了/未完了", command=self.toggle_todo).pack(side=tk.LEFT, padx=(0, 6))
        ttk.Button(btn_f, text="削除", command=self.delete_todo).pack(side=tk.LEFT)

    def add_todo(self):
        text = self.todo_entry.get().strip()
        if not text:
            return
        self.todo_tasks.append({"text": text, "done": False})
        self.todo_entry.delete(0, tk.END)
        self._refresh_todo()

    def toggle_todo(self):
        sel = self.todo_listbox.curselection()
        if sel:
            idx = sel[0]
            self.todo_tasks[idx]["done"] = not self.todo_tasks[idx]["done"]
            self._refresh_todo()

    def delete_todo(self):
        sel = self.todo_listbox.curselection()
        if sel:
            self.todo_tasks.pop(sel[0])
            self._refresh_todo()

    def _refresh_todo(self):
        self.todo_listbox.delete(0, tk.END)
        for t in self.todo_tasks:
            prefix = "✅ " if t["done"] else "⬜ "
            self.todo_listbox.insert(tk.END, prefix + t["text"])
            if t["done"]:
                self.todo_listbox.itemconfig(tk.END, fg="#aaa")

    def _build_memo_tab(self, parent):
        f = tk.Frame(parent, bg="#f8f9fc", padx=14, pady=10)
        f.pack(fill=tk.BOTH, expand=True)
        tk.Label(f, text="今日のメモ・振り返り:", bg="#f8f9fc",
                 font=("Noto Sans JP", 11)).pack(anchor="w")
        self.memo_text = tk.Text(f, font=("Noto Sans JP", 12), wrap=tk.WORD,
                                 bg="white", padx=8, pady=8, height=14)
        self.memo_text.pack(fill=tk.BOTH, expand=True, pady=(6, 0))


if __name__ == "__main__":
    root = tk.Tk()
    app = App35(root)
    root.mainloop()
