import { readFileSync, writeFileSync } from "fs"

/**
 * Moves values around in 'section'. Section will be changed
 * @param section
 * @param referenceSection
 * @param language
 */
function fixSection(section, referenceSection, language: string) {
    if (section === undefined) {
        return
    }
    outer: for (const key of Object.keys(section)) {
        const v = section[key]
        if (typeof v === "string" && referenceSection[key] === undefined) {
            // Not found in reference, search for a subsection with this key
            for (const subkey of Object.keys(referenceSection)) {
                const subreference = referenceSection[subkey]
                if (subreference[key] !== undefined) {
                    if (section[subkey] !== undefined && section[subkey][key] !== undefined) {
                        console.log(`${subkey}${key} is already defined... Looking furhter`)
                        continue
                    }
                    if (typeof section[subkey] === "string") {
                        console.log(
                            `NOT overwriting '${section[subkey]}' for ${subkey} (needed for ${key})`
                        )
                    } else {
                        // apply fix
                        if (section[subkey] === undefined) {
                            section[subkey] = {}
                        }
                        section[subkey][key] = section[key]
                        delete section[key]
                        console.log(
                            `Rewritten key: ${key} --> ${subkey}.${key} in language ${language}`
                        )
                        continue outer
                    }
                }
            }
            console.log("No solution found for " + key)
        }
    }
}

function main(args: string[]): void {
    const sectionName = args[0]
    const l = args[1]
    if (sectionName === undefined) {
        console.log(
            "Tries to automatically move translations to a new subsegment. Usage: 'sectionToCheck' 'language'"
        )
        return
    }
    const reference = JSON.parse(readFileSync("./langs/en.json", { encoding: "utf8" }))
    const path = `./langs/${l}.json`
    const file = JSON.parse(readFileSync(path, { encoding: "utf8" }))
    fixSection(file[sectionName], reference[sectionName], l)
    writeFileSync(path, JSON.stringify(file, null, "    ") + "\n")
}

main(process.argv.slice(2))