export type ChannelId = 'email' | 'sms' | 'whatsapp';

export const CHANNELS: Record<ChannelId, { id: ChannelId; name: string; desc: string }> = {
  email: {
    id: 'email',
    name: 'Email',
    desc: 'Invoices, reports, password resets',
  },
  sms: {
    id: 'sms',
    name: 'SMS',
    desc: 'One-time codes and alerts',
  },
  whatsapp: {
    id: 'whatsapp',
    name: 'WhatsApp',
    desc: 'Order updates and notifications',
  },
};

export interface CatalogField {
  key: string;
  label: string;
  placeholder: string;
  secret: boolean;
  help?: string;
}

export interface CatalogProvider {
  type: string;
  name: string;
  desc: string;
  fields: CatalogField[];
}

export const PROVIDER_CATALOG: Record<ChannelId, CatalogProvider[]> = {
  email: [
    {
      type: 'smtp',
      name: 'SMTP server',
      desc: 'Gmail, Outlook, Zoho SMTP or your own mail server.',
      fields: [
        { key: 'host', label: 'Server host', placeholder: 'smtp.gmail.com', secret: false },
        { key: 'port', label: 'Port', placeholder: '587', secret: false },
        { key: 'username', label: 'Username', placeholder: 'you@company.com', secret: false },
        { key: 'password', label: 'Password or app password', placeholder: '', secret: true },
        { key: 'from', label: 'Send emails as', placeholder: 'noreply@company.com', secret: false },
      ],
    },
    {
      type: 'sendgrid',
      name: 'SendGrid',
      desc: 'Twilio SendGrid Mail Send API.',
      fields: [
        { key: 'api_key', label: 'API key', placeholder: 'SG.…', secret: true },
        { key: 'from', label: 'Send emails as', placeholder: 'noreply@company.com', secret: false },
      ],
    },
    {
      type: 'ses',
      name: 'Amazon SES',
      desc: 'AWS Simple Email Service.',
      fields: [
        { key: 'region', label: 'AWS region', placeholder: 'us-east-1', secret: false },
        { key: 'access_key', label: 'Access key ID', placeholder: '', secret: false },
        { key: 'secret', label: 'Secret access key', placeholder: '', secret: true },
        { key: 'from', label: 'Send emails as', placeholder: 'noreply@company.com', secret: false },
      ],
    },
    {
      type: 'zoho',
      name: 'Zoho Mail API',
      desc: 'Zoho ZeptoMail / Mail API.',
      fields: [
        { key: 'token', label: 'Send mail token', placeholder: '', secret: true },
        { key: 'from', label: 'Send emails as', placeholder: 'noreply@company.com', secret: false },
      ],
    },
  ],
  sms: [
    {
      type: 'twilio',
      name: 'Twilio SMS',
      desc: 'Programmable SMS from a Twilio number.',
      fields: [
        { key: 'sid', label: 'Account SID', placeholder: 'AC…', secret: false },
        { key: 'token', label: 'Auth token', placeholder: '', secret: true },
        { key: 'from', label: 'From number', placeholder: '+14155550100', secret: false },
      ],
    },
  ],
  whatsapp: [
    {
      type: 'meta',
      name: 'WhatsApp Cloud API',
      desc: 'Meta WhatsApp Business Platform.',
      fields: [
        { key: 'phone_id', label: 'Phone number ID', placeholder: '', secret: false },
        { key: 'waba', label: 'Business account ID', placeholder: '', secret: false },
        { key: 'token', label: 'Permanent access token', placeholder: '', secret: true },
      ],
    },
    {
      type: 'twilio-wa',
      name: 'Twilio WhatsApp',
      desc: 'WhatsApp through your Twilio account.',
      fields: [
        { key: 'sid', label: 'Account SID', placeholder: 'AC…', secret: false },
        { key: 'token', label: 'Auth token', placeholder: '', secret: true },
        { key: 'from', label: 'WhatsApp number', placeholder: '+14155550100', secret: false },
      ],
    },
  ],
};

export function ago(timestamp: number): string {
  const s = Math.floor((Date.now() - timestamp) / 1000);
  if (s < 5) return 'just now';
  if (s < 60) return `${s}s ago`;
  if (s < 3600) return `${Math.floor(s / 60)} min ago`;
  return new Date(timestamp).toLocaleString([], {
    hour: '2-digit',
    minute: '2-digit',
    month: 'short',
    day: 'numeric',
  });
}

