import * as kv from './kv_store.tsx';

export interface PendenciaIntegracaoFiscal {
  id: string;
  empresaId: string;
  documentoId: string;
  numeroDocumento: string;
  tipoDocumento: string;
  erros: string[];
  estado: 'pendente' | 'resolvida';
  tentativas: number;
  criadoEm: string;
  atualizadoEm: string;
}

function chave(empresaId: string, documentoId: string) {
  return `integracao_fiscal:${empresaId}:${documentoId}`;
}

export async function registrarPendencia(documento: any, erros: string[]) {
  if (!documento?.empresaId || !documento?.id || erros.length === 0) return null;
  const id = chave(documento.empresaId, documento.id);
  const anterior = await kv.get(id);
  const agora = new Date().toISOString();
  const pendencia: PendenciaIntegracaoFiscal = {
    id,
    empresaId: documento.empresaId,
    documentoId: documento.id,
    numeroDocumento: documento.numeroDocumento || documento.id,
    tipoDocumento: documento.tipoDocumento || documento.tipo || 'documento_fiscal',
    erros,
    estado: 'pendente',
    tentativas: Number(anterior?.tentativas || 0) + 1,
    criadoEm: anterior?.criadoEm || agora,
    atualizadoEm: agora,
  };
  await kv.set(id, pendencia);
  return pendencia;
}

export async function resolverPendencia(empresaId: string, documentoId: string) {
  const id = chave(empresaId, documentoId);
  const anterior = await kv.get(id);
  if (!anterior) return null;
  const resolvida = { ...anterior, estado: 'resolvida', erros: [], atualizadoEm: new Date().toISOString() };
  await kv.set(id, resolvida);
  return resolvida;
}

export async function listarPendencias(empresaId: string) {
  const itens = await kv.getByPrefix(`integracao_fiscal:${empresaId}:`);
  return itens
    .filter((item: any) => item.estado === 'pendente')
    .sort((a: any, b: any) => String(b.atualizadoEm).localeCompare(String(a.atualizadoEm)));
}
