import { messages } from '../../core/messages/index.js';
import { lerEstado } from '../persistence/index.js';
const log = messages.log;
const { MarketplaceRemoteMensagens } = messages;
const DEFAULT_REGISTRIES = [
    {
        nome: 'comunidade',
        url: 'https://raw.githubusercontent.com/mocoto-strike/tutanus-marketplace/main/index.json',
        tipo: 'url',
        habilitado: true,
    },
];
const CONFIG_PATH = '.tutanus/marketplace/registries.json';
async function carregarRegistries() {
    try {
        const configs = await lerEstado(CONFIG_PATH);
        if (!configs || configs.length === 0)
            return DEFAULT_REGISTRIES;
        return configs;
    }
    catch {
        return DEFAULT_REGISTRIES;
    }
}
export async function listarRegistries() {
    return carregarRegistries();
}
export async function buscarNoRegistry(termo, registry) {
    const registries = registry ? [registry] : await carregarRegistries();
    const resultados = [];
    for (const reg of registries) {
        if (!reg.habilitado)
            continue;
        try {
            const analistas = await fetchRegistry(reg);
            const filtrados = analistas.filter(a => a.nome.toLowerCase().includes(termo.toLowerCase()) ||
                a.descricao.toLowerCase().includes(termo.toLowerCase()) ||
                a.tags.some((t) => t.toLowerCase().includes(termo.toLowerCase())));
            resultados.push(...filtrados);
        }
        catch (err) {
            log.aviso(MarketplaceRemoteMensagens.registryIndisponivel(reg.nome, err instanceof Error ? err.message : String(err)));
        }
    }
    return resultados;
}
export async function obterAnalistaDoRegistry(nome, registry) {
    const registries = registry ? [registry] : await carregarRegistries();
    for (const reg of registries) {
        if (!reg.habilitado)
            continue;
        try {
            const analistas = await fetchRegistry(reg);
            const encontrado = analistas?.find(a => a.nome === nome);
            if (encontrado)
                return encontrado;
        }
        catch {
            continue;
        }
    }
    return null;
}
async function fetchRegistry(reg) {
    switch (reg.tipo) {
        case 'url': {
            const res = await fetch(reg.url);
            if (!res.ok)
                throw new Error(MarketplaceRemoteMensagens.httpStatus(res.status));
            const data = await res.json();
            return data.analistas || [];
        }
        case 'github': {
            const apiUrl = `https://api.github.com/repos/${reg.url}/contents/index.json`;
            const res = await fetch(apiUrl, {
                headers: { Accept: 'application/vnd.github.v3.raw' },
            });
            if (!res.ok)
                throw new Error(MarketplaceRemoteMensagens.githubApiHttpStatus(res.status));
            const data = await res.json();
            return data.analistas || [];
        }
        default:
            return [];
    }
}
export async function search(termo) {
    const resultados = await buscarNoRegistry(termo);
    return { total: resultados.length, resultados };
}
export async function info(nome) {
    return obterAnalistaDoRegistry(nome);
}
//# sourceMappingURL=remote.js.map