import { defineStore, storeToRefs } from 'pinia';
import { ICountry, IRegion, useConfigConnectors, useUiKitConfigStore } from '@/configs';
import { ref } from 'vue';

export const useUiKitDirectoryStore = defineStore('ui-kit-directory-store', () => {
    const uiKitConfigStore = useUiKitConfigStore();
    const { userAuthToken } = storeToRefs(uiKitConfigStore);

    const countryList = ref<ICountry[]>([]);
    const regionList = ref<IRegion[]>([]);

    const getCountryList = async () => {
        if (countryList.value.length) {
            return countryList.value;
        }
        countryList.value = await useConfigConnectors(userAuthToken.value).getCountryList();

        // Приоритетные страны, которые должны быть первыми (по коду)
        const priorityCountries = ['UZ', 'TJ', 'KG', 'AM', 'AZ'];

        // Сортируем список стран: сначала приоритетные, затем остальные
        countryList.value.sort((a, b) => {
            const aIndex = priorityCountries.indexOf(a.code);
            const bIndex = priorityCountries.indexOf(b.code);

            // Если обе страны в приоритетном списке, сортируем по порядку в массиве
            if (aIndex !== -1 && bIndex !== -1) {
                return aIndex - bIndex;
            }
            // Если только первая страна в приоритетном списке, она идет первой
            if (aIndex !== -1) {
                return -1;
            }
            // Если только вторая страна в приоритетном списке, она идет первой
            if (bIndex !== -1) {
                return 1;
            }
            // Если обе страны не в приоритетном списке, сохраняем исходный порядок
            return 0;
        });

        return countryList.value;
    };

    const getRegionList = async () => {
        if (regionList.value.length) {
            return regionList.value;
        }
        regionList.value = await useConfigConnectors(userAuthToken.value).getRegionList();
        return regionList.value;
    };

    const getAllDirectory = async () => Promise.all([getRegionList(), getCountryList()]);

    return {
        countryList,
        regionList,

        getCountryList,
        getRegionList,
        getAllDirectory,
    };
});
