/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/features/agenda/composables/useAgendaSettings.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/
import { ref } from 'vue';
import { getMyAgendaSettings, getMyWorkSchedule } from '../services/agendaRepository';
import { useMelissaCacheStore, MELISSA_CACHE_TTL } from '@/stores/melissaCacheStore';

// opts.cache (opt-in): habilita stale-while-revalidate via melissaCacheStore.
// Default false pra preservar comportamento de páginas de configuração que
// editam settings/workRules (esperam ver mudança imediata após salvar).
export function useAgendaSettings(opts = {}) {
    const useCache = !!opts.cache;
    const cache = useCache ? useMelissaCacheStore() : null;

    const loading = ref(false);
    const error = ref('');
    const settings = ref(null);
    const workRules = ref([]); // [{ dia_semana, hora_inicio, hora_fim }]

    async function _doFetch() {
        const [cfg, rules] = await Promise.all([getMyAgendaSettings(), getMyWorkSchedule()]);
        settings.value = cfg;
        workRules.value = rules;
        if (cache) {
            // Cache key inclui owner_id da config — invalida automaticamente
            // se o usuário trocar (multi-tenant ou alternar entre staff).
            const key = cfg?.owner_id || 'anon';
            cache.set('agendaSettings', { settings: cfg, workRules: rules }, key);
        }
        return { settings: cfg, workRules: rules };
    }

    async function load() {
        if (cache) {
            // Sem owner_id ainda, key vira 'anon' — pega qualquer cache
            // do mesmo escopo (que normalmente é o user logado).
            const cached = cache.get('agendaSettings', undefined, MELISSA_CACHE_TTL.agendaSettings);
            if (cached) {
                settings.value = cached.settings;
                workRules.value = cached.workRules;
                _doFetch().catch((e) => {
                    // eslint-disable-next-line no-console
                    console.warn('[useAgendaSettings] revalidate', e);
                });
                return;
            }
        }

        loading.value = true;
        error.value = '';
        try {
            await _doFetch();
        } catch (e) {
            error.value = e?.message || 'Falha ao carregar configurações da agenda.';
            settings.value = null;
            workRules.value = [];
        } finally {
            loading.value = false;
        }
    }

    return { loading, error, settings, workRules, load };
}
