import datetime

# ═════════════════════════════════════════════
# Task class
# ═════════════════════════════════════════════

class Task:
    VALID_PRIORITIES = ["low", "medium", "high"]
    VALID_STATUSES   = ["pending", "in progress", "done"]

    def __init__(self, title, priority, deadline):
        self.title    = title
        self.priority = priority
        self.status   = "pending"
        self.deadline = deadline
        self.created  = datetime.datetime.now().strftime("%Y-%m-%d,%H:%M:%S")

    def __str__(self):
        return f"[{self.status.upper()}] {self.title} | priority: {self.priority} | deadline: {self.deadline}"

    def __repr__(self):
        return f"Task('{self.title}', '{self.priority}', '{self.deadline}')"


# ═════════════════════════════════════════════
# TaskList class
# ═════════════════════════════════════════════

class TaskList:
    def __init__(self, name):
        self.name     = name
        self.tasks    = {}
        self.filename = f"{name}.txt"

    def __str__(self):
        total   = len(self.tasks)
        pending = sum(1 for t in self.tasks.values() if t.status == "pending")
        done    = sum(1 for t in self.tasks.values() if t.status == "done")
        return f"{self.name} — {total} tasks | {pending} pending | {done} done"

    def __len__(self):
        return len(self.tasks)

    # ─────────────────────────────────────────
    # Get next ID
    # ─────────────────────────────────────────

    def get_next_id(self):
        if not self.tasks:
            return 1
        return max(self.tasks.keys()) + 1

    # ─────────────────────────────────────────
    # Load from file
    # ─────────────────────────────────────────

    def load(self):
        self.tasks = {}
        try:
            with open(self.filename, "r", encoding="utf-8") as f:
                for line in f:
                    row          = line.strip().split(";")
                    task         = Task(row[1], row[2], row[4])
                    task.status  = row[3]
                    task.created = row[5]
                    self.tasks[int(row[0])] = task
        except FileNotFoundError:
            pass

    # ─────────────────────────────────────────
    # Add task
    # ─────────────────────────────────────────

    def add(self):
        title = ""
        while not title:
            title = input("Task title: ")

        priority = ""
        while priority not in Task.VALID_PRIORITIES:
            priority = input("Priority (low/medium/high): ").lower()

        deadline = ""
        while not deadline:
            deadline = input("Deadline (YYYY-MM-DD): ")

        id   = self.get_next_id()
        task = Task(title, priority, deadline)
        self.tasks[id] = task

        with open(self.filename, "a", encoding="utf-8") as f:
            f.write(f"{id};{task.title};{task.priority};{task.status};{task.deadline};{task.created}\n")
        self.load()

    # ─────────────────────────────────────────
    # Show all tasks
    # ─────────────────────────────────────────

    def show(self):
        if not self.tasks:
            print("No tasks yet.")
            return
        for id, task in self.tasks.items():
            print(f"{id}. {task}")


# ═════════════════════════════════════════════
# Menu
# ═════════════════════════════════════════════

task_list = TaskList("daily")
task_list.load()

print(task_list)

while True:
    print("\nTask Manager")
    option = input("1-Add task\n2-Show all\nq-Quit\nChoose: ")
    if option == "1":
        task_list.add()
        print("Task added successfully!")
    elif option == "2":
        task_list.show()
    elif option == "q":
        break
    else:
        print("Invalid option.")
