import tkinter as tk
from tkinter import messagebox
import datetime
import os


class KanameOS:

    def __init__(self, root):
        self.root = root

        root.title("KanameOS")
        root.geometry("800x500")
        root.configure(bg="#008080")

        # タイトル
        title = tk.Label(
            root,
            text="KanameOS Desktop",
            font=("Consolas", 20),
            bg="#000080",
            fg="white"
        )
        title.pack(fill="x")


        # 時計
        self.clock = tk.Label(
            root,
            font=("Consolas", 14),
            bg="#008080",
            fg="white"
        )
        self.clock.pack()

        self.update_clock()


        # アプリボタン
        frame = tk.Frame(
            root,
            bg="#008080"
        )
        frame.pack(pady=40)


        tk.Button(
            frame,
            text="📝 Memo",
            width=15,
            height=3,
            command=self.memo
        ).grid(row=0,column=0,padx=10)


        tk.Button(
            frame,
            text="🧮 Calculator",
            width=15,
            height=3,
            command=self.calc
        ).grid(row=0,column=1,padx=10)


        tk.Button(
            frame,
            text="💻 Terminal",
            width=15,
            height=3,
            command=self.terminal
        ).grid(row=0,column=2,padx=10)


        tk.Button(
            frame,
            text="Power Off",
            width=15,
            height=3,
            command=root.destroy
        ).grid(row=1,column=1,pady=20)



    def update_clock(self):

        now=datetime.datetime.now()

        self.clock.config(
            text=now.strftime(
                "%Y/%m/%d %H:%M:%S"
            )
        )

        self.root.after(
            1000,
            self.update_clock
        )



    def memo(self):

        win=tk.Toplevel()

        win.title("Memo")
        win.geometry("400x300")


        text=tk.Text(win)
        text.pack(
            expand=True,
            fill="both"
        )


        def save():

            with open(
                "memo.txt",
                "w",
                encoding="utf-8"
            ) as f:
                f.write(
                    text.get("1.0","end")
                )

            messagebox.showinfo(
                "Memo",
                "Saved"
            )


        tk.Button(
            win,
            text="Save",
            command=save
        ).pack()



    def calc(self):

        win=tk.Toplevel()

        win.title("Calculator")


        entry=tk.Entry(win)
        entry.pack()


        result=tk.Label(win)
        result.pack()


        def run():

            try:
                result.config(
                    text=str(
                        eval(entry.get())
                    )
                )

            except:
                result.config(
                    text="ERROR"
                )


        tk.Button(
            win,
            text="=",
            command=run
        ).pack()



    def terminal(self):

        win=tk.Toplevel()

        win.title("Terminal")
        win.geometry("500x300")


        output=tk.Text(
            win,
            bg="black",
            fg="lime"
        )

        output.pack(
            expand=True,
            fill="both"
        )


        entry=tk.Entry(win)
        entry.pack(fill="x")


        def command(event=None):

            cmd=entry.get()

            output.insert(
                "end",
                "> "+cmd+"\n"
            )


            if cmd=="help":
                output.insert(
                    "end",
                    "help time ls shutdown\n"
                )


            elif cmd=="time":
                output.insert(
                    "end",
                    str(datetime.datetime.now())
                    +"\n"
                )


            elif cmd=="ls":
                output.insert(
                    "end",
                    str(os.listdir())
                    +"\n"
                )


            elif cmd=="shutdown":

                self.root.destroy()


            else:

                output.insert(
                    "end",
                    "Unknown command\n"
                )


            entry.delete(0,"end")


        entry.bind(
            "<Return>",
            command
        )



root=tk.Tk()

os=KanameOS(root)

root.mainloop()