import { MicrosoftTranslator } from "anylang/translators";

const SUPPORTED_LANGUAGES = [
  "ace",
  "af",
  "sq",
  "am",
  "ar",
  "arz",
  "ary",
  "arb",
  "hy",
  "as",
  "ast",
  "az",
  "ban",
  "bn",
  "ba",
  "eu",
  "bbc",
  "be",
  "bho",
  "bik",
  "brx",
  "bs",
  "bg",
  "yue",
  "ca",
  "ceb",
  "hne",
  "lzh",
  "zh-Hans",
  "zh-Hant",
  "co",
  "hr",
  "cs",
  "da",
  "prs",
  "dv",
  "doi",
  "nl",
  "en",
  "en-GB",
  "epo",
  "et",
  "fo",
  "fj",
  "fil",
  "fi",
  "fr",
  "fr-CA",
  "fy",
  "fur",
  "gl",
  "lug",
  "ka",
  "de",
  "el",
  "gu",
  "ht",
  "ha",
  "he",
  "hil",
  "hi",
  "mww",
  "hu",
  "iba",
  "is",
  "ig",
  "ilo",
  "id",
  "ikt",
  "iu",
  "iu-Latn",
  "ga",
  "it",
  "jam",
  "ja",
  "jav",
  "kea",
  "kn",
  "pam",
  "ks",
  "kk",
  "km",
  "rw",
  "tlh-Latn",
  "gom",
  "ko",
  "kri",
  "ku",
  "kmr",
  "ky",
  "lo",
  "la",
  "lv",
  "lij",
  "lim",
  "ln",
  "lt",
  "lmo",
  "dsb",
  "lb",
  "mk",
  "mai",
  "mg",
  "ms",
  "ml",
  "mt",
  "mr",
  "mwr",
  "mfe",
  "min",
  "mn-Cyrl",
  "mn-Mong",
  "my",
  "mi",
  "ne",
  "nb",
  "nno",
  "nya",
  "oc",
  "or",
  "pap",
  "ps",
  "fa",
  "pl",
  "pt",
  "pt-PT",
  "pa",
  "pnb",
  "otq",
  "ro",
  "run",
  "ru",
  "sm",
  "sa",
  "srd",
  "sr-Cyrl",
  "sr-Latn",
  "st",
  "nso",
  "tn",
  "crs",
  "sn",
  "scn",
  "sd",
  "si",
  "sk",
  "sl",
  "so",
  "es",
  "su",
  "sw",
  "sv",
  "ty",
  "tgk",
  "ta",
  "tt",
  "te",
  "tet",
  "th",
  "bo",
  "ti",
  "tpi",
  "to",
  "tr",
  "tk",
  "uk",
  "hsb",
  "ur",
  "ug",
  "uz",
  "vec",
  "vi",
  "war",
  "cy",
  "xh",
  "ydd",
  "yo",
  "yua",
  "zu",
] as const;

type TRequest = {
  text: string;
  lang: (typeof SUPPORTED_LANGUAGES)[number];
};

class BingTranslateFetcher {
  #translator: MicrosoftTranslator;

  constructor() {
    this.#translator = new MicrosoftTranslator();
  }

  async getFullTextTranslation({ text, lang }: TRequest): Promise<string> {
    try {
      const response = await this.#translator.translate(text, "auto", lang);
      return response;
    } catch (error) {
      console.error("Bing translation error:", error);
      throw error;
    }
  }
}

export const bingTranslateFetcher = new BingTranslateFetcher();
