import json
import os

def fill_gaps():
    path = os.path.join("src", "locales", "translations.json")
    with open(path, "r", encoding="utf-8") as f:
        data = json.load(f)

    def set_translations(key_path, ru, ua):
        parts = key_path.split('.')
        curr = data
        for p in parts[:-1]:
            curr = curr.get(p, {})
        if parts[-1] in curr:
            curr[parts[-1]]["ru"] = ru
            curr[parts[-1]]["ua"] = ua

    # Admin Actions
    set_translations("admin.actions.cancel", "Отмена", "Скасувати")
    set_translations("admin.actions.create", "Создать", "Створити")
    set_translations("admin.actions.delete", "Удалить", "Видалити")
    set_translations("admin.actions.deleteFile", "Удалить файл", "Видалити файл")
    set_translations("admin.actions.edit", "Редактировать", "Редагувати")
    set_translations("admin.actions.printInvoice", "Печать счета", "Друк рахунку")
    set_translations("admin.actions.save", "Сохранить", "Зберегти")
    set_translations("admin.actions.savePrice", "Сохранить цену", "Зберегти ціну")
    set_translations("admin.actions.sending", "Отправка...", "Надсилання...")
    set_translations("admin.actions.toggleAdminRole", "Переключить роль админа", "Перемкнути роль адміна")
    set_translations("admin.actions.viewOriginal", "Оригинал", "Оригінал")
    set_translations("admin.addNew", "Добавить", "Додати")
    set_translations("admin.allStatuses", "Все статусы", "Усі статуси")
    set_translations("admin.dashboard", "Дэшборд", "Дешборд")

    # Admin Fields
    set_translations("admin.fields.active", "Активен", "Активний")
    set_translations("admin.fields.category", "Категория", "Категорія")
    set_translations("admin.fields.colors", "Цвета", "Кольори")
    set_translations("admin.fields.content", "Контент", "Контент")
    set_translations("admin.fields.customColorInfo", "Введите HEX или название", "Введіть HEX або назву")
    set_translations("admin.fields.defaultColor", "Цвет по умолчанию", "Колір за замовчуванням")
    set_translations("admin.fields.description", "Описание", "Опис")
    set_translations("admin.fields.email", "Email", "Email")
    set_translations("admin.fields.estimated", "Оценка", "Оцінка")
    set_translations("admin.fields.excerpt", "Краткое описание", "Короткий опис")
    set_translations("admin.fields.externalLink", "Внешняя ссылка", "Зовнішнє посилання")
    set_translations("admin.fields.finalPrice", "Финальная цена", "Фінальна ціна")
    set_translations("admin.fields.firstName", "Имя", "Ім'я")
    set_translations("admin.fields.imageUrl", "URL изображения", "URL зображення")
    set_translations("admin.fields.lastName", "Фамилия", "Прізвище")
    set_translations("admin.fields.name", "Название", "Назва")
    set_translations("admin.fields.noPhotos", "Нет фото", "Немає фото")
    set_translations("admin.fields.noPortfolio", "Портфолио пусто", "Портфоліо порожнє")
    set_translations("admin.fields.noUsers", "Пользователи не найдены", "Користувачів не знайдено")
    set_translations("admin.fields.notifyUser", "Уведомить клиента", "Повідомити клієнта")
    set_translations("admin.fields.originalSnapshot", "Снимок заказа", "Знімок замовлення")
    set_translations("admin.fields.password", "Пароль", "Пароль")
    set_translations("admin.fields.phone", "Телефон", "Телефон")
    set_translations("admin.fields.photoReport", "Фотоотчет", "Фотозвіт")
    set_translations("admin.fields.portfolioAllowed", "Разрешить в портфолио", "Дозволити в портфоліо")
    set_translations("admin.fields.price", "Цена", "Ціна")
    set_translations("admin.fields.pricePerCm3", "Цена за см³", "Ціна за см³")
    set_translations("admin.fields.projectNotes", "Заметки к проекту", "Нотатки до проєкту")
    set_translations("admin.fields.publishImmediately", "Опубликовать сразу", "Опублікувати відразу")
    set_translations("admin.fields.quantity", "Количество", "Кількість")
    set_translations("admin.fields.selectColorStrict", "Строгий выбор цвета", "Суворий вибір кольору")
    set_translations("admin.fields.selectMaterialStrict", "Строгий выбор материала", "Суворий вибір матеріалу")
    set_translations("admin.fields.shippingAddress", "Адрес доставки", "Адреса доставки")
    set_translations("admin.fields.slug", "Slug (URL)", "Slug (URL)")
    set_translations("admin.fields.snapshotInfo", "Состояние заказа на момент создания", "Стан замовлення на момент створення")
    set_translations("admin.fields.sourceFiles", "Исходные файлы", "Вихідні файли")
    set_translations("admin.fields.strictSelectionInfo", "Клиент может выбирать только из списка", "Клієнт може вибирати тільки зі списку")
    set_translations("admin.fields.techType", "Тип технологии", "Тип технології")
    set_translations("admin.fields.title", "Заголовок", "Заголовок")

    # Labels
    set_translations("admin.labels.actions", "Действия", "Дії")
    set_translations("admin.labels.chat", "Чат", "Чат")
    set_translations("admin.labels.contact", "Контакт", "Контакт")
    set_translations("admin.labels.registered", "Зарегистрирован", "Зареєстрований")
    set_translations("admin.labels.role", "Роль", "Роль")
    set_translations("admin.labels.user", "Пользователь", "Користувач")
    set_translations("admin.managementCenter", "Центр управления", "Центр управління")

    # Modals
    set_translations("admin.modals.createMaterial", "Добавить материал", "Додати матеріал")
    set_translations("admin.modals.createPost", "Новая запись", "Новий запис")
    set_translations("admin.modals.createService", "Новая услуга", "Нова послуга")
    set_translations("admin.modals.createUser", "Новый пользователь", "Новий користувач")
    set_translations("admin.modals.editMaterial", "Редактировать материал", "Редагувати матеріал")
    set_translations("admin.modals.editPost", "Редактировать запись", "Редагувати запис")
    set_translations("admin.modals.editService", "Редактировать услугу", "Редагувати послугу")
    set_translations("admin.modals.editUser", "Редактировать пользователя", "Редагувати користувача")
    set_translations("admin.searchPlaceholder", "Поиск...", "Пошук...")
    set_translations("admin.searchUsersPlaceholder", "Поиск пользователей...", "Пошук користувачів...")

    # Toasts
    set_translations("admin.toasts.chatDisabled", "Чат отключен", "Чат вимкнено")
    set_translations("admin.toasts.chatEnabled", "Чат включен", "Чат увімкнено")
    set_translations("admin.toasts.fileAttached", "Файл прикреплен", "Файл прикріплено")
    set_translations("admin.toasts.fileDeleted", "Файл удален", "Файл видалено")
    set_translations("admin.toasts.genericError", "Произошла ошибка", "Сталася помилка")
    set_translations("admin.toasts.loadError", "Ошибка загрузки", "Помилка завантаження")
    set_translations("admin.toasts.materialDeleted", "Материал удален", "Матеріал видалено")
    set_translations("admin.toasts.materialSaved", "Материал сохранен", "Матеріал збережено")
    set_translations("admin.toasts.noConsent", "Нет согласия", "Немає згоди")
    set_translations("admin.toasts.paramsUpdated", "Параметры обновлены", "Параметри оновлено")
    set_translations("admin.toasts.photoAdded", "Фото добавлено", "Фото додано")
    set_translations("admin.toasts.postDeleted", "Запись удалена", "Запис видалено")
    set_translations("admin.toasts.postSaved", "Запись сохранена", "Запис збережено")
    set_translations("admin.toasts.priceUpdated", "Цена обновлена", "Ціна оновлена")
    set_translations("admin.toasts.roleUpdated", "Роль обновлена", "Роль оновлена")
    set_translations("admin.toasts.serviceDeleted", "Услуга удалена", "Послуга видалена")
    set_translations("admin.toasts.serviceSaved", "Услуга сохранена", "Послугу збережено")
    set_translations("admin.toasts.statusUpdated", "Статус обновлен", "Статус оновлено")
    set_translations("admin.toasts.userCreated", "Пользователь создан", "Користувач створений")
    set_translations("admin.toasts.userSaved", "Пользователь сохранен", "Користувача збережено")
    set_translations("admin.total", "Всего", "Всього")

    # Auth
    set_translations("auth.fields.newPassword", "Новый пароль", "Новий пароль")
    set_translations("auth.studio", "Студия 3D Печати", "Студія 3D Друку")
    set_translations("auth.toasts.accountCreated", "Аккаунт создан! Теперь можно войти.", "Акаунт створено! Тепер можна увійти.")
    set_translations("auth.toasts.passwordChanged", "Пароль успешно изменен!", "Пароль успішно змінено!")
    set_translations("auth.toasts.passwordsNoMatch", "Пароли не совпадают", "Паролі не збігаються")
    set_translations("auth.toasts.resetLinkSent", "Ссылка на сброс пароля отправлена на почту.", "Посилання на скидання пароля надіслано на пошту.")
    set_translations("auth.toasts.socialSoon", "Вход через {provider} скоро появится!", "Вхід через {provider} скоро з'явиться!")
    set_translations("auth.toasts.welcomeBack", "С возвращением!", "З поверненням!")

    # Blog & Errors
    set_translations("blog.exploreOther", "Посмотреть другие", "Переглянути інші")
    set_translations("blog.loading", "Загрузка записей...", "Завантаження записів...")
    set_translations("blog.loadingSingle", "Загрузка записи...", "Завантаження запису...")
    set_translations("blog.notFound", "Запись не найдена", "Запис не знайдено")
    set_translations("errors.404.button", "Вернуться на главную", "Повернутися на головну")
    set_translations("errors.404.subtitle", "Страница не найдена", "Сторінка не знайдена")
    set_translations("errors.404.title", "Ошибка 404", "Помилка 404")

    # Footer & Nav
    set_translations("footer.location", "Херцег-Нови, Черногория", "Херцег-Нові, Чорногорія")
    set_translations("nav.admin", "Админ", "Адмін")
    set_translations("nav.adminPanel", "Панель управления", "Панель управління")
    set_translations("nav.loggedOut", "Вы успешно вышли", "Ви успішно вийшли")
    set_translations("nav.nuances", "Нюансы", "Нюанси")
    set_translations("nav.unreadMessages", "Непрочитанные сообщения", "Непрочитані повідомлення")
    set_translations("nav.unreadTooltip", "У вас есть непрочитанные сообщения", "У вас є непрочитані повідомлення")

    # Orders
    set_translations("orders.labels.estimate", "Расчет", "Розрахунок")
    set_translations("orders.labels.materialColor", "Материал и цвет", "Матеріал та колір")
    set_translations("orders.labels.myNotes", "Мои заметки", "Мої замітки")
    set_translations("orders.labels.progressReport", "Отчет о выполнении", "Звіт про виконання")
    set_translations("orders.labels.projectFiles", "Файлы проекта", "Файли проєкту")
    set_translations("orders.labels.quantity", "Кол-во", "К-сть")
    set_translations("orders.labels.status", "Статус", "Статус")

    # Portfolio & Privacy
    set_translations("portfolio.emptyDesc", "Здесь скоро появятся наши новые работы.", "Тут скоро з'являться наші нові роботи.")
    set_translations("portfolio.emptyTitle", "Портфолио пусто", "Портфоліо порожнє")
    set_translations("portfolio.loading", "Загрузка портфолио...", "Завантаження портфоліо...")
    set_translations("privacy.contactDesc", "Если у вас есть вопросы, наша команда всегда готова помочь.", "Якщо у вас є питання, наша команда завжди готова допомогти.")
    set_translations("privacy.contactTitle", "Нужна помощь?", "Потрібна допомога?")
    set_translations("privacy.responseNotice", "Мы отвечаем на все запросы в течение 48 часов.", "Ми відповідаємо на всі запити протягом 48 годин.")

    # Upload
    set_translations("upload.error", "Ошибка загрузки", "Помилка завантаження")
    set_translations("upload.estimatedTotal", "Приблизительный итог", "Орієнтовний підсумок")
    set_translations("upload.priceDisclaimer", "Финальная цена может измениться после проверки", "Фінальна ціна може змінитися після перевірки")
    set_translations("upload.selectColor", "Выберите цвет", "Виберіть колір")

    # Footer missing ones
    def set_simple(path, lang, val):
        parts = path.split('.')
        curr = data
        for p in parts[:-1]: curr = curr.get(p, {})
        if parts[-1] in curr:
            if isinstance(curr[parts[-1]], dict):
                curr[parts[-1]][lang] = val
            else:
                pass

    set_simple("footer.contactDesc", "me", "Ako imate bilo kakvih pitanja, slobodno nas kontaktirajte.")
    set_simple("footer.contactDesc", "ru", "Если у вас есть вопросы, свяжитесь с нами.")
    set_simple("footer.contactDesc", "ua", "Якщо у вас є питання, зв'яжіться з нами.")
    set_simple("footer.contactTitle", "me", "Kontakt")
    set_simple("footer.contactTitle", "ru", "Контакты")
    set_simple("footer.contactTitle", "ua", "Контакти")
    set_simple("footer.intro", "me", "Bavimo se digitalnom zanatom kroz 3D štampu u Crnoj Gori.")
    set_simple("footer.intro", "ru", "Мы занимаемся цифровым ремеслом через 3D-печать в Черногории.")
    set_simple("footer.intro", "ua", "Ми займаємося цифровим ремеслом через 3D-друк у Чорногорії.")

    # Fix Portfolio missing EN/ME
    set_simple("portfolio.empty", "en", "Portfolio is currently empty.")
    set_simple("portfolio.empty", "me", "Portfolio je trenutno prazan.")
    
    # Fix Upload Quantity missing EN
    set_simple("upload.quantity", "en", "Quantity")

    with open(path, "w", encoding="utf-8") as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

if __name__ == "__main__":
    fill_gaps()
