import fs from 'node:fs';
import path from 'node:path';

export interface ArchivedProvider {
  id: string;
  name: string;
  adapter?: string;
  channel?: string;
  deleted_at: number;
}

function archivePath(stateDir: string): string {
  return path.join(path.resolve(stateDir), 'providers-archive.json');
}

export function loadProviderArchive(stateDir: string): ArchivedProvider[] {
  const file = archivePath(stateDir);
  try {
    if (!fs.existsSync(file)) return [];
    const raw = JSON.parse(fs.readFileSync(file, 'utf8')) as { providers?: ArchivedProvider[] };
    return Array.isArray(raw.providers) ? raw.providers : [];
  } catch {
    return [];
  }
}

export function upsertArchivedProvider(stateDir: string, entry: ArchivedProvider): void {
  const dir = path.resolve(stateDir);
  fs.mkdirSync(dir, { recursive: true });
  const existing = loadProviderArchive(stateDir).filter((p) => p.id !== entry.id);
  existing.push(entry);
  fs.writeFileSync(
    archivePath(stateDir),
    JSON.stringify({ providers: existing }, null, 2),
    'utf8',
  );
}

/** Best-effort display label when a deleted provider was never archived. */
export function guessProviderNameFromId(id: string): string | null {
  if (id.startsWith('twilio-wa') || id.includes('twilio-wa')) return 'Twilio WhatsApp';
  if (id.startsWith('twilio-')) return 'Twilio SMS';
  if (id.startsWith('smtp-')) return 'SMTP';
  if (id.startsWith('sendgrid-')) return 'SendGrid';
  if (id.startsWith('ses-')) return 'Amazon SES';
  if (id.startsWith('msg91-')) return 'MSG91';
  if (id.startsWith('meta-') || id.startsWith('whatsapp-')) return 'WhatsApp Cloud API';
  if (id.startsWith('http-')) return 'Custom HTTP provider';
  return null;
}
