/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Arquivo: src/features/patients/composables/useCep.js
| V#9 — composable de busca CEP via ViaCEP. Reutilizável em qualquer form
| que precise auto-completar endereço.
|--------------------------------------------------------------------------
*/
import { ref } from 'vue';
import { digitsOnly } from '@/utils/validators';

const VIACEP_URL = (cep) => `https://viacep.com.br/ws/${cep}/json/`;

export function useCep() {
    const loading = ref(false);
    const error = ref(null);

    /**
     * Consulta CEP no ViaCEP. Retorna {cidade, uf, bairro, endereco, complemento}
     * ou null se CEP inválido / não encontrado.
     */
    async function fetchCep(cepRaw) {
        const cep = digitsOnly(cepRaw);
        if (cep.length !== 8) return null;

        loading.value = true;
        error.value = null;

        try {
            const res = await fetch(VIACEP_URL(cep));
            if (!res.ok) throw new Error(`HTTP ${res.status}`);
            const data = await res.json();
            if (!data || data.erro) return null;
            return {
                cidade: data.localidade || '',
                uf: data.uf || '',
                bairro: data.bairro || '',
                endereco: data.logradouro || '',
                complemento: data.complemento || ''
            };
        } catch (e) {
            error.value = e?.message || 'Falha na consulta CEP';
            return null;
        } finally {
            loading.value = false;
        }
    }

    return { loading, error, fetchCep };
}
