#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import os
from collections import defaultdict

def analyze_translations():
    """Analizuje wszystkie pliki tłumaczeń i znajduje brakujące klucze"""

    lang_dir = "public/resources/lang/page"
    languages = ["en", "fr", "it", "pl"]

    # Pobierz listę wszystkich plików JSON
    files = []
    en_dir = os.path.join(lang_dir, "en")
    for file in os.listdir(en_dir):
        if file.endswith(".json"):
            files.append(file)

    print(f"Znaleziono {len(files)} plików tłumaczeń:")
    for file in files:
        print(f"  - {file}")

    # Dla każdego pliku, zbierz wszystkie klucze ze wszystkich języków
    all_keys_by_file = {}
    translations_by_file_lang = {}

    for file in files:
        print(f"\nAnalizuję plik: {file}")
        all_keys_by_file[file] = set()
        translations_by_file_lang[file] = {}

        for lang in languages:
            file_path = os.path.join(lang_dir, lang, file)
            try:
                with open(file_path, 'r', encoding='utf-8') as f:
                    data = json.load(f)
                    translations_by_file_lang[file][lang] = data
                    all_keys_by_file[file].update(data.keys())
                    print(f"  {lang}: {len(data)} kluczy")
            except FileNotFoundError:
                print(f"  {lang}: PLIK NIE ISTNIEJE!")
                translations_by_file_lang[file][lang] = {}
            except json.JSONDecodeError as e:
                print(f"  {lang}: BŁĄD JSON: {e}")
                translations_by_file_lang[file][lang] = {}

    # Znajdź brakujące tłumaczenia
    missing_translations = defaultdict(lambda: defaultdict(list))

    for file in files:
        all_keys = all_keys_by_file[file]
        print(f"\n=== {file} ===")
        print(f"Wszystkich kluczy: {len(all_keys)}")

        for lang in languages:
            existing_keys = set(translations_by_file_lang[file][lang].keys())
            missing_keys = all_keys - existing_keys

            if missing_keys:
                missing_translations[file][lang] = list(missing_keys)
                print(f"{lang}: BRAKUJE {len(missing_keys)} kluczy: {sorted(missing_keys)}")
            else:
                print(f"{lang}: ✓ Kompletny ({len(existing_keys)} kluczy)")

    return missing_translations, translations_by_file_lang, all_keys_by_file

def fix_missing_translations(missing_translations, translations_by_file_lang, all_keys_by_file):
    """Uzupełnia brakujące tłumaczenia"""

    lang_dir = "public/resources/lang/page"

    for file, missing_by_lang in missing_translations.items():
        print(f"\nUzupełniam tłumaczenia dla pliku: {file}")

        for lang, missing_keys in missing_by_lang.items():
            if not missing_keys:
                continue

            print(f"  Uzupełniam {len(missing_keys)} kluczy w języku {lang}")

            # Znajdź tłumaczenia z innych języków
            for missing_key in missing_keys:
                # Priorytet: en > pl > fr > it
                source_value = None
                source_lang = None

                for priority_lang in ["en", "pl", "fr", "it"]:
                    if priority_lang != lang and missing_key in translations_by_file_lang[file][priority_lang]:
                        source_value = translations_by_file_lang[file][priority_lang][missing_key]
                        source_lang = priority_lang
                        break

                if source_value:
                    translations_by_file_lang[file][lang][missing_key] = source_value
                    print(f"    {missing_key}: '{source_value}' (z {source_lang})")
                else:
                    # Jeśli nie ma w żadnym języku, użyj klucza jako wartość
                    translations_by_file_lang[file][lang][missing_key] = missing_key
                    print(f"    {missing_key}: '{missing_key}' (domyślne)")

            # Zapisz zaktualizowany plik
            file_path = os.path.join(lang_dir, lang, file)
            sorted_translations = dict(sorted(translations_by_file_lang[file][lang].items()))

            with open(file_path, 'w', encoding='utf-8') as f:
                json.dump(sorted_translations, f, ensure_ascii=False, indent=2)

            print(f"    ✓ Zaktualizowano {file_path}")

if __name__ == "__main__":
    print("=== ANALIZA PLIKÓW TŁUMACZEŃ ===\n")

    missing_translations, translations_by_file_lang, all_keys_by_file = analyze_translations()

    print("\n" + "="*50)
    print("PODSUMOWANIE BRAKUJĄCYCH TŁUMACZEŃ")
    print("="*50)

    total_missing = 0
    for file, missing_by_lang in missing_translations.items():
        for lang, missing_keys in missing_by_lang.items():
            if missing_keys:
                total_missing += len(missing_keys)

    if total_missing > 0:
        print(f"Znaleziono łącznie {total_missing} brakujących tłumaczeń.")
        print("\nCzy chcesz je automatycznie uzupełnić? (używając tłumaczeń z innych języków)")

        # Automatycznie uzupełnij (w tym przypadku)
        print("Automatycznie uzupełniam brakujące tłumaczenia...")
        fix_missing_translations(missing_translations, translations_by_file_lang, all_keys_by_file)
        print("\n✓ Wszystkie brakujące tłumaczenia zostały uzupełnione!")
    else:
        print("✓ Wszystkie pliki tłumaczeń są kompletne!")
