сделайimport json
import os
import tkinter as tk
from tkinter import messagebox

# Путь к файлу JSON
file_path = "deaths.json"

# Функция для генерации нового уникального ID
def generate_id(data):
    if data:
        # Ищем максимальный ID в существующих данных и увеличиваем его на 1
        max_id = max(entry.get("id", 0) for entry in data)
        return max_id + 1
    return 1

# Функция для сохранения данных
def save_data():
    # Загрузка существующих данных из файла, если он существует
    if os.path.exists(file_path):
        with open(file_path, "r", encoding="utf-8") as file:
            try:
                data = json.load(file)
                # Проверяем, что файл содержит список записей
                if not isinstance(data, list):
                    data = []
            except json.JSONDecodeError:
                # Если файл пуст или поврежден, создаем пустой список
                data = []
    else:
        data = []

    # Получение данных из полей ввода
    template = {
        "id": generate_id(data),
        "name": entry_name.get(),
        "date_of_birth": entry_dob.get(),
        "place_of_birth": entry_pob.get(),
        "date_of_death": entry_dod.get(),
        "age_at_death": int(entry_age.get()) if entry_age.get().isdigit() else 0,
        "place_of_death": entry_pod.get(),
        "cause_of_death": entry_cod.get(),
        "occupation": entry_occupation.get(),
        "education": entry_education.get()
    }

    # Проверка на наличие всех полей
    if not all(template.values()):
        messagebox.showerror("Ошибка", "Все поля должны быть заполнены!")
        return

    # Добавление новой записи
    data.append(template)

    # Сохранение обновленных данных в файл
    with open(file_path, "w", encoding="utf-8") as file:
        json.dump(data, file, indent=4, ensure_ascii=False)

    # Сообщение об успешном сохранении
    messagebox.showinfo("Успех", "Данные успешно сохранены в deaths.json")
    clear_entries()

# Функция для очистки полей ввода
def clear_entries():
    entry_name.delete(0, tk.END)
    entry_dob.delete(0, tk.END)
    entry_pob.delete(0, tk.END)
    entry_dod.delete(0, tk.END)
    entry_age.delete(0, tk.END)
    entry_pod.delete(0, tk.END)
    entry_cod.delete(0, tk.END)
    entry_occupation.delete(0, tk.END)
    entry_education.delete(0, tk.END)

# Создание главного окна
root = tk.Tk()
root.title("Добавление данных о смерти")
root.geometry("400x500")

# Поля ввода данных
labels = ["Имя:", "Дата рождения:", "Место рождения:", "Дата смерти:", 
          "Возраст на момент смерти:", "Место смерти:", "Причина смерти:", 
          "Профессия:", "Образование:"]
entries = []

for i, label_text in enumerate(labels):
    label = tk.Label(root, text=label_text)
    label.grid(row=i, column=0, padx=10, pady=5, sticky="e")
    
    entry = tk.Entry(root, width=30)
    entry.grid(row=i, column=1, padx=10, pady=5)
    entries.append(entry)

entry_name, entry_dob, entry_pob, entry_dod, entry_age, entry_pod, entry_cod, entry_occupation, entry_education = entries

# Кнопка для сохранения данных
save_button = tk.Button(root, text="Сохранить", command=save_data)
save_button.grid(row=len(labels), columnspan=2, pady=20)

# Запуск приложения
root.mainloop()