#!/bin/python3
import re

OUTPUT_FILE = "./ts/localization/locales.ts"


def wrapValue(value):
    """
    Wraps the given value in single quotes if it contains any characters other than letters, digits, or underscores.

    Args:
      value (str): The value to be wrapped.

    Returns:
      str: The wrapped value if it contains any special characters, otherwise the original value.
    """
    if re.search(r"[^a-zA-Z0-9_]", value):
        return f"'{value}'"
    return value


def parseValue(value):
    """
    Parses the given value by replacing single quotes with escaped single quotes.

    Args:
      value (str): The value to be parsed.

    Returns:
      str: The parsed value with escaped single quotes.
    """
    return value.replace("'", "\\'")


def generate_js_object(data):
    """
    Generate a JavaScript object from a dictionary.

    Args:
      data (dict): The dictionary containing key-value pairs.

    Returns:
      str: A string representation of the JavaScript object.
    """
    js_object = "{\n"
    for key, value in data.items():
        js_object += f"  {wrapValue(key)}: '{parseValue(value)}',\n"
    js_object += "}"
    return js_object


DISCLAIMER = """
// This file was generated by a script. Do not modify this file manually.
// To make changes, modify the corresponding JSON file and re-run the script.

"""


def generateLocalesType(locale):
    """
    Generate the locales type and write it to a file.

    Args:
      locale: The locale dictionary containing the localization data.
    """
    # write the locale_dict to a file
    with open(OUTPUT_FILE, "w", encoding='utf-8') as ts_file:
        ts_file.write(
            f"{DISCLAIMER}"
            f"export const en = {generate_js_object(locale)} as const;\nexport type Dictionary = typeof en;"
        )
    return f"Locales generated at: {OUTPUT_FILE}"
