import tkinter as tk
from tkinter import messagebox

class ContactManager:
    def __init__(self, root):
        self.root = root
        self.root.title("Simple Contact Manager")
        self.contacts = []

        # Create GUI elements
        self.name_label = tk.Label(root, text="Name:")
        self.name_label.grid(row=0, column=0, padx=10, pady=5)
        self.name_entry = tk.Entry(root)
        self.name_entry.grid(row=0, column=1, padx=10, pady=5)

        self.phone_label = tk.Label(root, text="Phone:")
        self.phone_label.grid(row=1, column=0, padx=10, pady=5)
        self.phone_entry = tk.Entry(root)
        self.phone_entry.grid(row=1, column=1, padx=10, pady=5)

        self.add_button = tk.Button(root, text="Add Contact", command=self.add_contact)
        self.add_button.grid(row=2, column=0, columnspan=2, padx=10, pady=5)

        self.contacts_listbox = tk.Listbox(root)
        self.contacts_listbox.grid(row=3, column=0, columnspan=2, padx=10, pady=5)

        self.search_label = tk.Label(root, text="Search:")
        self.search_label.grid(row=4, column=0, padx=10, pady=5)
        self.search_entry = tk.Entry(root)
        self.search_entry.grid(row=4, column=1, padx=10, pady=5)

        self.search_button = tk.Button(root, text="Search", command=self.search_contact)
        self.search_button.grid(row=5, column=0, columnspan=2, padx=10, pady=5)

        self.delete_button = tk.Button(root, text="Delete Contact", command=self.delete_contact)
        self.delete_button.grid(row=6, column=0, columnspan=2, padx=10, pady=5)

        # Load contacts from file
        self.load_contacts()

    def add_contact(self):
        name = self.name_entry.get().strip()
        phone = self.phone_entry.get().strip()
        if name and phone:
            self.contacts.append((name, phone))
            self.contacts_listbox.insert(tk.END, f"{name}: {phone}")
            self.save_contacts()
            self.clear_fields()
        else:
            messagebox.showwarning("Warning", "Please enter both name and phone number.")

    def delete_contact(self):
        selection = self.contacts_listbox.curselection()
        if selection:
            index = selection[0]
            del self.contacts[index]
            self.contacts_listbox.delete(index)
            self.save_contacts()
        else:
            messagebox.showwarning("Warning", "Please select a contact to delete.")

    def search_contact(self):
        query = self.search_entry.get().strip().lower()
        self.contacts_listbox.delete(0, tk.END)
        for contact in self.contacts:
            name, phone = contact
            if query in name.lower() or query in phone.lower():
                self.contacts_listbox.insert(tk.END, f"{name}: {phone}")

    def load_contacts(self):
        try:
            with open("contacts.txt", "r") as file:
                for line in file:
                    name, phone = line.strip().split(":")
                    self.contacts.append((name, phone))
                    self.contacts_listbox.insert(tk.END, f"{name}: {phone}")
        except FileNotFoundError:
            pass

    def save_contacts(self):
        with open("contacts.txt", "w") as file:
            for contact in self.contacts:
                name, phone = contact
                file.write(f"{name}:{phone}\n")

    def clear_fields(self):
        self.name_entry.delete(0, tk.END)
        self.phone_entry.delete(0, tk.END)

def main():
    root = tk.Tk()
    contact_manager = ContactManager(root)
    root.mainloop()

if __name__ == "__main__":
    main()
