import path from 'node:path';
import { messages } from '../../core/messages/index.js';
import { lerEstado, salvarEstado } from '../persistence/index.js';
const DIRETORIO_PADRAO = '.tutanus/marketplace';
const ARQUIVO_ESTADO = 'pacotes-instalados.json';
const log = messages.log;
function caminhoEstado() {
    const dir = process.env.TUTANUS_MARKETPLACE_DIR || DIRETORIO_PADRAO;
    return path.join(process.cwd(), dir, ARQUIVO_ESTADO);
}
function caminhoPacote(nome) {
    const dir = process.env.TUTANUS_MARKETPLACE_DIR || DIRETORIO_PADRAO;
    return path.join(process.cwd(), dir, 'packages', nome);
}
export async function listarPacotesInstalados() {
    try {
        return await lerEstado(caminhoEstado(), []);
    }
    catch {
        return [];
    }
}
export async function salvarPacotesInstalados(pacotes) {
    await salvarEstado(caminhoEstado(), pacotes);
}
export async function pacoteEstaInstalado(nome) {
    const pacotes = await listarPacotesInstalados();
    return pacotes?.find(p => p.nome === nome) || null;
}
export async function instalarPacote(analista, versao, _conteudo) {
    const pacotes = await listarPacotesInstalados();
    const existente = pacotes.findIndex(p => p.nome === analista.nome);
    const pkg = {
        nome: analista.nome,
        versao,
        descricao: analista.descricao,
        caminho: caminhoPacote(analista.nome),
        dataInstalacao: Date.now(),
        autor: analista.versoes[0]?.author || 'desconhecido',
        licenca: analista.versoes[0]?.license || 'MIT',
        categoria: analista.categoria,
        tags: analista.tags,
    };
    if (existente >= 0) {
        pacotes[existente] = pkg;
    }
    else {
        pacotes.push(pkg);
    }
    await salvarPacotesInstalados(pacotes);
    log.sucesso(messages.MarketplaceRemoteMensagens.pacoteInstaladoComSucesso(analista.nome, versao));
    log.info(messages.MarketplaceRemoteMensagens.caminhoPacote(pkg.caminho));
    log.info(messages.MarketplaceRemoteMensagens.categoriaPacote(pkg.categoria));
    return pkg;
}
export async function removerPacote(nome) {
    const pacotes = await listarPacotesInstalados();
    const idx = pacotes.findIndex(p => p.nome === nome);
    if (idx < 0) {
        log.aviso(messages.MarketplaceRemoteMensagens.pacoteNaoInstalado(nome));
        return false;
    }
    pacotes.splice(idx, 1);
    await salvarPacotesInstalados(pacotes);
    log.sucesso(messages.MarketplaceRemoteMensagens.pacoteRemovidoComSucesso(nome));
    return true;
}
export async function obterInfoPacote(nome) {
    return pacoteEstaInstalado(nome);
}
export async function listarCategoriasInstaladas() {
    const pacotes = await listarPacotesInstalados();
    const cats = new Set(pacotes.map(p => p.categoria));
    return Array.from(cats).sort();
}
export async function buscarPacotesInstalados(termo) {
    const pacotes = await listarPacotesInstalados();
    const termoLower = termo.toLowerCase();
    return pacotes.filter(p => p.nome.toLowerCase().includes(termoLower) ||
        p.descricao.toLowerCase().includes(termoLower) ||
        p.categoria.toLowerCase().includes(termoLower) ||
        p.tags.some((tag) => tag.toLowerCase().includes(termoLower)));
}
//# sourceMappingURL=registry.js.map