import os
import json
from glob import glob
from openai import OpenAI

client = OpenAI(
    # This is the default and can be omitted
    api_key=os.environ.get("OPENAI_API_KEY")
)

# Keys to translate. If this is empty, all keys are translated.
KEYS = []

DEFAULT_LANG = "en.json"
DIR = os.path.normpath(os.path.join(
    os.path.dirname(os.path.abspath(__file__)), "../i18n"))
BASE = json.loads(open(os.path.join(DIR, DEFAULT_LANG), "r").read())


def translate(data, lang):
    completion = client.chat.completions.create(
        model="gpt-4.1-mini",
        messages=[
            {"role": "system", "content": "You are an i18n language pack translator for eaglecast, a mailing list manager. Remember that context when translating."},
            {"role": "user",
                "content": "Translate the untranslated English strings in the following JSON language map to {}. Retain any technical terms or acronyms.".format(lang)},
            {"role": "user", "content": json.dumps(data)}
            # {"role": "user", "content": "Hello world good morning!"}
        ]
    )

    return json.loads(str(completion.choices[0].message.content))


# Go through every i18n file.
for f in glob(os.path.join(DIR, "*.json")):
    if os.path.basename(f) == DEFAULT_LANG:
        continue

    print(os.path.basename(f))

    data = json.loads(open(f, "r").read())

    # Diff the entire file or only given keys.
    if KEYS:
        diff = {k: BASE[k] for k in KEYS}
    else:
        diff = {k: v for k, v in data.items() if BASE.get(k) == v}

    new = translate(diff, data["_.name"])
    data.update(new)

    with open(f, "w") as o:
        o.write(json.dumps(data, sort_keys=True,
                indent=4, ensure_ascii=False) + "\n")
