package org.unicode.cldr.icu;

import org.unicode.cldr.util.CldrUtility;
import org.unicode.cldr.util.Iso639Data;
import org.unicode.cldr.util.SupplementalDataInfo;

public class GenerateISO639LanguageTables {

    private static SupplementalDataInfo sdi = SupplementalDataInfo
        .getInstance(CldrUtility.DEFAULT_SUPPLEMENTAL_DIRECTORY);

    private static void generateLanguageTable(int size) {
        String tag = "LANGUAGES";
        System.out.println("/* Generated using org.unicode.cldr.icu.GenerateISO639LanguageTables */");
        if (size == 3) {
            tag = "LANGUAGES_3";
        }
        System.out.println("static const char * const " + tag + "[] = {");
        System.out.print("    ");
        String currentStartingLetter = "a";
        int languagesOnThisLine = 0;
        for (String language : sdi.getCLDRLanguageCodes()) {
            if (!language.startsWith(currentStartingLetter) || languagesOnThisLine > 7) {
                System.out.println();
                System.out.print("    ");
                currentStartingLetter = language.substring(0, 1);
                languagesOnThisLine = 0;
            }
            if (size == 2) {
                System.out.print("\"" + language + "\", ");
            } else {

                System.out.print("\""
                    + (Iso639Data.toAlpha3(language) != null ? Iso639Data.toAlpha3(language) : language) + "\", ");
            }
            if (language.length() == 2 && size == 2) {
                System.out.print(" ");
            }
            languagesOnThisLine++;
        }
    }

    private static void generateStructLocaleTxt() {
        System.out.println("    Languages{");
        for (String language : sdi.getCLDRLanguageCodes()) {
            System.out.println("        " + language + "{\"\"}");
        }
        System.out.println("    }");
    }

    public static void main(String[] args) {
        generateLanguageTable(2);
        System.out.println();
        generateLanguageTable(3);
        System.out.println();
        generateStructLocaleTxt();
    }

}