import {VueI18n} from "vue-i18n";
import {EnumChoice, EnumChoices} from "~/types/interfaces";
import {CountryCode, parsePhoneNumber} from "libphonenumber-js";
import ArrayUtils from "~/services/utils/arrayUtils";

export default class I18nUtils {
    private i18n!: VueI18n

    public constructor(i18n: VueI18n) {
        this.i18n = i18n
    }

    /**
     * Return the given enum with its labels translated
     *
     * If sort is true, the enum is also sorted by its newly translated labels
     *
     * @param enum_
     * @param sort
     */
    public translateEnum(enum_: EnumChoices, sort: boolean = true): EnumChoices {
        enum_ = enum_.map(
            (item: EnumChoice) => {
                return {value: item.value, label: this.i18n.t(item.label) as string}
            }
        )

        if (sort) {
            enum_ = ArrayUtils.sortObjectsByProp(enum_, 'label') as EnumChoices
        }

        return enum_
    }

    public formatPhoneNumber (number: string, defaultCountry?: CountryCode): string {
        const parsed = parsePhoneNumber(number, defaultCountry)
        return parsed ? parsed.formatNational() : ''
    }
}
