import { language_t } from "./lang";
import { Cache } from "react-native-cache";
import AsyncStorage from '@react-native-async-storage/async-storage';
import { LIBRETRANSLATE_BASE_URL } from "@/constants/api";

const cache = new Cache({
    namespace: "translation_terrace",
    policy: {
        maxEntries: 50000, // if unspecified, it can have unlimited entries
        stdTTL: 0 // the standard ttl as number in seconds, default: 0 (unlimited)
    },
    backend: AsyncStorage
});

export class Translator {
    constructor(public source : language_t, public target : language_t) {

    }
    async translate(text : string) {
        const url = LIBRETRANSLATE_BASE_URL + `/translate`;
        const res = await fetch(url, {
            method: "POST",
            body: JSON.stringify({
                q: text,
                source: this.source,
                target: this.target,
                format: "text",
                alternatives: 3,
                api_key: ""
            }),
            headers: { "Content-Type": "application/json" }
        });
        
        const data = await res.json();
        return data.translatedText
    }
}

export class CachedTranslator extends Translator {
    async translate (text : string) {
        const key1 = `${this.source}::${this.target}::${text}`
        const tr1 = await cache.get(key1);
        if (tr1) return tr1;
        const tr2 = await super.translate(text);
        const key2 = `${this.source}::${this.target}::${text}`
        await cache.set(key2, tr2);
    }
}