from tkinter import *
from tkinter import ttk
from datetime import datetime

def add_task():
    task = task1_entry.get()
    date_str = date_entry.get()

    # Convert the date string to a datetime object for sorting
    date_obj = datetime.strptime(date_str, "%Y-%m-%d")

    status = "Done" if selection_var.get() == 1 else "Not Yet"
    task_details = f"Task: {task} - Last Date: {date_str} - Status: {status}"

    # Insert the task details in a sorted manner based on the date
    index = 0
    for i in range(tasks_listbox.size()):
        task_date_str = tasks_listbox.get(i).split("- Last Date: ")[1].split(" -")[0]
        task_date_obj = datetime.strptime(task_date_str, "%Y-%m-%d")
        if date_obj >= task_date_obj:
            index = i + 1
            continue
        else:
            break

    tasks_listbox.insert(index, task_details)

    # Clear the entry fields after adding a task
    task1_entry.delete(0, END)
    date_entry.delete(0, END)
    selection_var.set(0)

def save_tasks():
    with open("tasks.txt", "w") as file:
        for i in range(tasks_listbox.size()):
            file.write(tasks_listbox.get(i) + "\n")

def load_tasks():
    try:
        with open("tasks.txt", "r") as file:
            tasks = file.read().splitlines()
            tasks_listbox.delete(0, END)
            for task in tasks:
                tasks_listbox.insert(END, task)
    except FileNotFoundError:
        pass

def edit_task():
    selected_task = tasks_listbox.curselection()
    if selected_task:
        task_details = tasks_listbox.get(selected_task[0])
        task, last_date, status = task_details.split(" - Last Date: ")[0].split("Task: ")[1], task_details.split(" - Last Date: ")[1].split(" - Status: ")[0], task_details.split(" - Status: ")[1]
        task1_entry.delete(0, END)
        date_entry.delete(0, END)
        selection_var.set(0)
        task1_entry.insert(0, task)
        date_entry.insert(0, last_date)
        selection_var.set(1 if status == "Done" else 2)

def delete_task():
    selected_task = tasks_listbox.curselection()
    if selected_task:
        tasks_listbox.delete(selected_task)

root = Tk()
root.title("To-do list")
root.geometry("1000x1000")

title = Label(root, text="To-do list", font="calibre 20 bold")
title.grid(row=0, column=0, pady=10, columnspan=10)

task1_label = Label(root, text="Task 1")
task1_label.grid(row=1, column=1, padx=10, sticky="w")

task1_entry = Entry(root, width=20)
task1_entry.grid(row=1, column=2)

date_label = Label(root, text="Last Date")
date_label.grid(row=1, column=3, padx=10, sticky="e")

date_entry = Entry(root, width=20)
date_entry.grid(row=1, column=4, sticky="we")

gender_label = Label(root, text="Gender")
gender_label.grid(row=1, column=5, padx=10, sticky="e")

selection_var = IntVar()

done = Radiobutton(root, text="Done", variable=selection_var, value=1)
done.grid(row=1, column=6, padx=10, sticky="e")

not_yet = Radiobutton(root, text="Not Yet", variable=selection_var, value=2)
not_yet.grid(row=1, column=7, padx=10, sticky="e")

tasks_listbox = Listbox(root, height=10, width=50)
tasks_listbox.grid(row=2, column=1, columnspan=7, padx=10, pady=10)

add_button = Button(root, text="Add Task", command=add_task)
add_button.grid(row=3, column=1, pady=10, columnspan=7)

save_button = Button(root, text="Save Tasks", command=save_tasks)
save_button.grid(row=4, column=1, pady=10, columnspan=3)

load_tasks()  # Load tasks on application start

edit_button = Button(root, text="Edit Task", command=edit_task)
edit_button.grid(row=4, column=5, pady=10, columnspan=3)

delete_button = Button(root, text="Delete Task", command=delete_task)
delete_button.grid(row=4, column=8, pady=10)

root.mainloop()