import {inject, computed, ref} from 'vue';

export default function useSearch(params = null, options = null) {
    params = params === null ? [] : params;
    options = options === null ? {} : options;
    const axios = inject('axios');
    const results = ref({hits: []});
    const realSearchString = ref('');

    async function search(text, filters = [], options = {}) {
        var response = await axios.post(
            import.meta.env.MODE === 'development' ? 'http://localhost:7700/indexes/members/search' : '/indexes/members/search',
            {
                q: text,
                filter: filters,
                sort: ['lastname:asc', 'firstname:asc'],
                ...options,
            },
            {headers: {Authorization: 'Bearer ' + document.querySelector('meta[name="meilisearch_key"]').content}}
        );

        return response.data;
    }

    function clearSearch() {
        searchString.value = '';
    }

    const searchString = computed({
        get: () => realSearchString.value,
        set: async (v) => {
            realSearchString.value = v;

            if (!v.length) {
                results.value = {hits: []};
                return;
            }

            results.value = await search(v, params, options);
        },
    });

    return {
        search,
        searchString,
        results,
        clearSearch,
    };
}