from tkinter import *
from tkinter import messagebox
from datetime import datetime

class TodoList:
    def __init__(self, root):
        self.root = root
        self.root.title("To-Do List")

        self.tasks = []

        self.task_var = StringVar()

        # Create and configure the task entry widget
        self.task_entry = Entry(root, textvariable=self.task_var)
        self.task_entry.pack(pady=10)

        # Create and configure the add task button
        add_button = Button(root, text="Add Task", command=self.add_task)
        add_button.pack(pady=5)

        # Create the task list
        self.task_list = Listbox(root, width=50)
        self.task_list.pack(pady=10)

        # Create and configure the task options frame
        options_frame = Frame(root)
        options_frame.pack()

        # Create and configure the remove task button
        remove_button = Button(options_frame, text="Remove Task", command=self.remove_task)
        remove_button.grid(row=0, column=0, padx=5)

        # Create and configure the mark task as completed button
        complete_button = Button(options_frame, text="Mark as Completed", command=self.mark_as_completed)
        complete_button.grid(row=0, column=1, padx=5)

    def add_task(self):
        task = self.task_var.get().strip()
        if task:
            self.tasks.append(task)
            self.task_list.insert(END, task)
            self.task_var.set("")
        else:
            messagebox.showwarning("Empty Task", "Please enter a task.")

    def remove_task(self):
        selected_index = self.task_list.curselection()
        if selected_index:
            confirmed = messagebox.askyesno("Confirm Removal", "Are you sure you want to remove this task?")
            if confirmed:
                self.task_list.delete(selected_index)
                del self.tasks[selected_index[0]]
        else:
            messagebox.showwarning("No Task Selected", "Please select a task to remove.")

    def mark_as_completed(self):
        selected_index = self.task_list.curselection()
        if selected_index:
            confirmed = messagebox.askyesno("Confirm Completion", "Mark this task as completed?")
            if confirmed:
                task = self.tasks[selected_index[0]]
                completed_task = f"{task} [Completed on {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}]"
                self.task_list.delete(selected_index)
                self.task_list.insert(selected_index, completed_task)
                self.tasks[selected_index[0]] = completed_task
        else:
            messagebox.showwarning("No Task Selected", "Please select a task to mark as completed.")

root = Tk()
todo_list = TodoList(root)
root.mainloop()