CCCPaste
import tkinter as tk
from tkinter import messagebox
from tkinter import simpledialog
import os
import json

# Файлы для хранения данных
TEXT_FILE = "contacts.txt"  # Хранит ФИО, Код контакта, описание
TYPE_FILE = "numbers.json"  # Хранит Код контакта, номера телефонов, описание категории

# Утилиты для работы с файлами
def load_data():
    if not os.path.exists(TEXT_FILE):
        with open(TEXT_FILE, "w") as f:
            f.write("")

    if not os.path.exists(TYPE_FILE):
        with open(TYPE_FILE, "w") as f:
            json.dump({}, f)

    with open(TEXT_FILE, "r") as f:
        text_data = [line.strip().split(",") for line in f if line.strip()]

    with open(TYPE_FILE, "r") as f:
        type_data = json.load(f)

    return text_data, type_data

def save_type_data(data):
    with open(TYPE_FILE, "w") as f:
        json.dump(data, f)

# Статистика
def show_statistics(text_data, type_data):
    num_contacts = len(text_data)
    num_numbers = sum(len(numbers["phones"]) for numbers in type_data.values())
    messagebox.showinfo("Статистика", f"Контактов: {num_contacts}\nНомеров телефонов: {num_numbers}")

# Добавление контакта
def add_contact():
    fio = simpledialog.askstring("Добавить контакт", "Введите ФИО:")
    if not fio:
        return

    code = simpledialog.askstring("Добавить контакт", "Введите код контакта:")
    if not code:
        return

    description = simpledialog.askstring("Добавить контакт", "Введите описание:")
    if not description:
        return

    with open(TEXT_FILE, "a") as f:
        f.write(f"{fio},{code},{description}\n")

    phone = simpledialog.askstring("Добавить номер", "Введите номер телефона:")
    if phone:
        category = simpledialog.askstring("Добавить номер", "Введите описание категории:")
        with open(TYPE_FILE, "r") as f:
            type_data = json.load(f)

        type_data[code] = {"phones": [phone], "category": category}
        save_type_data(type_data)

    messagebox.showinfo("Успех", "Контакт успешно добавлен!")

# Добавление номера
def add_number():
    code = simpledialog.askstring("Добавить номер", "Введите код контакта:")
    if not code:
        return

    phone = simpledialog.askstring("Добавить номер", "Введите номер телефона:")
    if not phone:
        return

    category = simpledialog.askstring("Добавить номер", "Введите описание категории:")

    with open(TYPE_FILE, "r") as f:
        type_data = json.load(f)

    if code in type_data:
        type_data[code]["phones"].append(phone)
        save_type_data(type_data)
        messagebox.showinfo("Успех", "Номер успешно добавлен!")
    else:
        messagebox.showerror("Ошибка", "Контакт с таким кодом не найден!")

# Поиск номеров по ФИО
def search_numbers():
    search_type = simpledialog.askstring("Поиск номеров", "Введите тип поиска (ФИО/Имя/Фамилия):")
    if not search_type:
        return

    search_value = simpledialog.askstring("Поиск номеров", "Введите значение для поиска:")
    if not search_value:
        return

    with open(TEXT_FILE, "r") as f:
        text_data = [line.strip().split(",") for line in f if line.strip()]

    results = []
    for fio, code, _ in text_data:
        if (search_type.lower() == "фио" and search_value.lower() in fio.lower()) or \
           (search_type.lower() in ["имя", "фамилия"] and search_value.lower() in fio.split()[0].lower()):
            with open(TYPE_FILE, "r") as f:
                type_data = json.load(f)

            if code in type_data:
                results.append(f"Контакт: {fio}, Номера: {', '.join(type_data[code]['phones'])}")

    if results:
        messagebox.showinfo("Результаты поиска", "\n".join(results))
    else:
        messagebox.showinfo("Результаты поиска", "Контактов не найдено!")

# Редактирование номера
def edit_number():
    code = simpledialog.askstring("Редактировать номер", "Введите код контакта:")
    if not code:
        return

    phone = simpledialog.askstring("Редактировать номер", "Введите номер телефона для редактирования:")
    if not phone:
        return

    with open(TYPE_FILE, "r") as f:
        type_data = json.load(f)

    if code in type_data and phone in type_data[code]["phones"]:
        new_phone = simpledialog.askstring("Редактировать номер", "Введите новый номер:")
        if new_phone:
            index = type_data[code]["phones"].index(phone)
            type_data[code]["phones"][index] = new_phone
            save_type_data(type_data)
            messagebox.showinfo("Успех", "Номер успешно отредактирован!")
        else:
            messagebox.showerror("Ошибка", "Новый номер не введен!")
    else:
        messagebox.showerror("Ошибка", "Номер не найден!")

# Интерфейс программы
load_data()
root = tk.Tk()
root.title("Телефонный справочник")

tk.Button(root, text="Показать статистику", command=lambda: show_statistics(*load_data())).pack(pady=5)
tk.Button(root, text="Добавить контакт", command=add_contact).pack(pady=5)
tk.Button(root, text="Добавить номер", command=add_number).pack(pady=5)
tk.Button(root, text="Найти номера", command=search_numbers).pack(pady=5)
tk.Button(root, text="Редактировать номер", command=edit_number).pack(pady=5)

root.mainloop()