import tkinter as tk
from tkinter import messagebox
import json

class ContactManagerApp:
    def __init__(self, master):
        self.master = master
        self.master.title("Contact Manager")
        
        self.master.configure(bg="#f0f0f0")  # لون الخلفية
        
        self.contacts = self.load_contacts()  # تحميل جهات الاتصال من الملف
        
        self.name_var = tk.StringVar()
        self.phone_var = tk.StringVar()
        self.search_var = tk.StringVar()
        
        self.create_widgets()
        self.display_contacts()
    
    def create_widgets(self):
        # تسميات ومربعات إدخال لإضافة جهة اتصال جديدة
        tk.Label(self.master, text="Name:", bg="#f0f0f0").grid(row=0, column=0, sticky="w")
        tk.Entry(self.master, textvariable=self.name_var).grid(row=0, column=1)
        tk.Label(self.master, text="Phone:", bg="#f0f0f0").grid(row=1, column=0, sticky="w")
        tk.Entry(self.master, textvariable=self.phone_var).grid(row=1, column=1)
        
        # أزرار لإضافة، تعديل، حذف، والبحث في جهات الاتصال
        add_button = tk.Button(self.master, text="Add Contact", command=self.add_contact, bg="#4caf50", fg="white")
        add_button.grid(row=2, column=0, pady=5)
        edit_button = tk.Button(self.master, text="Edit Contact", command=self.edit_contact, bg="#2196f3", fg="white")
        edit_button.grid(row=2, column=1, pady=5)
        delete_button = tk.Button(self.master, text="Delete Contact", command=self.delete_contact, bg="#f44336", fg="white")
        delete_button.grid(row=2, column=2, pady=5)
        tk.Entry(self.master, textvariable=self.search_var, bg="white").grid(row=3, column=0, columnspan=2, padx=5, sticky="ew")
        search_button = tk.Button(self.master, text="Search", command=self.search_contact, bg="#ffc107", fg="white")
        search_button.grid(row=3, column=2, pady=5, sticky="ew")
        
        # قائمة لعرض جهات الاتصال
        self.contacts_listbox = tk.Listbox(self.master, width=50)
        self.contacts_listbox.grid(row=4, column=0, columnspan=3, padx=5, pady=5)
        self.contacts_listbox.bind("<<ListboxSelect>>", self.select_contact)
        
        # عرض جهات الاتصال الموجودة
        self.display_contacts()
    
    def add_contact(self):
        name = self.name_var.get()
        phone = self.phone_var.get()
        if name and phone:
            self.contacts.append({"name": name, "phone": phone})
            self.save_contacts()
            self.display_contacts()
            messagebox.showinfo("Success", "Contact added successfully.")
        else:
            messagebox.showerror("Error", "Name and phone number are required.")
    
    def edit_contact(self):
        selected_index = self.contacts_listbox.curselection()
        if selected_index:
            name = self.name_var.get()
            phone = self.phone_var.get()
            if name and phone:
                self.contacts[selected_index[0]] = {"name": name, "phone": phone}
                self.save_contacts()
                self.display_contacts()
                messagebox.showinfo("Success", "Contact updated successfully.")
            else:
                messagebox.showerror("Error", "Name and phone number are required.")
        else:
            messagebox.showerror("Error", "Please select a contact to edit.")
    
    def delete_contact(self):
        selected_index = self.contacts_listbox.curselection()
        if selected_index:
            del self.contacts[selected_index[0]]
            self.save_contacts()
            self.display_contacts()
            messagebox.showinfo("Success", "Contact deleted successfully.")
        else:
            messagebox.showerror("Error", "Please select a contact to delete.")
    
    def search_contact(self):
        search_term = self.search_var.get().lower()
        if search_term:
            filtered_contacts = [contact for contact in self.contacts if search_term in contact["name"].lower() or search_term in contact["phone"]]
            self.display_contacts(filtered_contacts)
        else:
            self.display_contacts()
    def select_contact(self, event):
        selected_index = self.contacts_listbox.curselection()
        if selected_index:
            selected_contact = self.contacts[selected_index[0]]
            self.name_var.set(selected_contact["name"])
            self.phone_var.set(selected_contact["phone"])
    
    def display_contacts(self, contacts=None):
        self.contacts_listbox.delete(0, tk.END)
        contacts = contacts or self.contacts
        for contact in contacts:
            self.contacts_listbox.insert(tk.END, f"{contact['name']} - {contact['phone']}")
    
    def load_contacts(self):
        try:
            with open("contacts.json", "r") as file:
                return json.load(file)
        except FileNotFoundError:
            return []
    
    def save_contacts(self):
        with open("contacts.json", "w") as file:
            json.dump(self.contacts, file)

root = tk.Tk()
app = ContactManagerApp(root)
root.mainloop()