/**
 * Configuración por defecto del CRM al habilitar el módulo (ticket CRM-04).
 * Fuente: docs/spec-crm-360.md §5.3 (etapas) y §6.1 (M90).
 *
 * Uso: CrmSeedService.asegurarConfiguracion(empresaId). Es idempotente: agrega
 * lo que falta y nunca pisa lo que el cliente ya configuró.
 *
 * Los `campos_obligatorios` son nombres de columna de `crm_oportunidades`, que
 * es contra lo que CRM-12 los valida al mover de etapa.
 */

export interface SeedEtapa {
  nombre: string;
  orden: number;
  probabilidad: number;
  campos_obligatorios: string[];
  dias_estancamiento: number | null;
  es_ganada?: boolean;
  es_perdida?: boolean;
}

export const PIPELINE_DEFAULT = {
  nombre: 'Ventas',
  descripcion: 'Embudo comercial por defecto',
};

export const ETAPAS_DEFAULT: SeedEtapa[] = [
  {
    nombre: 'Calificación',
    orden: 0,
    probabilidad: 10,
    campos_obligatorios: ['origen_id', 'vendedor_id'],
    dias_estancamiento: null,
  },
  {
    nombre: 'Necesidad / Demo',
    orden: 1,
    probabilidad: 30,
    campos_obligatorios: ['valor_unico'],
    // Único valor que la spec fija explícitamente: "recordatorio si 3 días sin actividad".
    dias_estancamiento: 3,
  },
  {
    nombre: 'Propuesta enviada',
    orden: 2,
    probabilidad: 50,
    campos_obligatorios: ['presupuesto_id'],
    dias_estancamiento: null,
  },
  {
    nombre: 'Negociación',
    orden: 3,
    probabilidad: 70,
    campos_obligatorios: ['fecha_cierre_estimada'],
    dias_estancamiento: null,
  },
  // Entrar acá exige el asistente de cierre (M98); el PATCH de etapa devuelve 409.
  { nombre: 'Ganada', orden: 4, probabilidad: 100, campos_obligatorios: [], dias_estancamiento: null, es_ganada: true },
  {
    nombre: 'Perdida',
    orden: 5,
    probabilidad: 0,
    campos_obligatorios: ['motivo_perdida_id'],
    dias_estancamiento: null,
    es_perdida: true,
  },
];

export const ORIGENES_DEFAULT = [
  { codigo: 'WHATSAPP', descripcion: 'WhatsApp', orden: 0 },
  { codigo: 'INSTAGRAM', descripcion: 'Instagram', orden: 1 },
  { codigo: 'FACEBOOK', descripcion: 'Facebook', orden: 2 },
  { codigo: 'WEB', descripcion: 'Formulario web', orden: 3 },
  { codigo: 'SHOP', descripcion: 'Novasis Shop', orden: 4 },
  { codigo: 'TURNE', descripcion: 'TURNE App', orden: 5 },
  { codigo: 'REFERIDO', descripcion: 'Referido', orden: 6 },
  { codigo: 'VISITA', descripcion: 'Visita comercial', orden: 7 },
  { codigo: 'FERIA', descripcion: 'Feria o evento', orden: 8 },
  { codigo: 'META_ADS', descripcion: 'Meta Ads', orden: 9 },
  { codigo: 'MOSTRADOR', descripcion: 'Mostrador', orden: 10 },
];

export const MOTIVOS_DEFAULT = [
  { tipo: 'perdida', descripcion: 'Precio', orden: 0 },
  { tipo: 'perdida', descripcion: 'Se fue con la competencia', orden: 1 },
  { tipo: 'perdida', descripcion: 'Sin respuesta', orden: 2 },
  { tipo: 'perdida', descripcion: 'No tenía presupuesto', orden: 3 },
  { tipo: 'perdida', descripcion: 'Fuera de plazo de entrega', orden: 4 },
  { tipo: 'descarte', descripcion: 'Spam', orden: 0 },
  { tipo: 'descarte', descripcion: 'Duplicado', orden: 1 },
  { tipo: 'descarte', descripcion: 'Sin interés', orden: 2 },
  { tipo: 'descarte', descripcion: 'Datos incorrectos', orden: 3 },
  { tipo: 'churn', descripcion: 'Precio', orden: 0 },
  { tipo: 'churn', descripcion: 'Dejó de necesitar el servicio', orden: 1 },
  { tipo: 'churn', descripcion: 'Disconforme con el servicio', orden: 2 },
  { tipo: 'churn', descripcion: 'Cerró la empresa', orden: 3 },
] as const;

/** L–V 08–18, Sáb 08–12 (spec §6.1). `dia`: 0 = domingo. */
export const CALENDARIO_DEFAULT = {
  nombre: 'Horario comercial',
  zona_horaria: 'America/Asuncion',
  horario: [
    { dia: 1, desde: '08:00', hasta: '18:00' },
    { dia: 2, desde: '08:00', hasta: '18:00' },
    { dia: 3, desde: '08:00', hasta: '18:00' },
    { dia: 4, desde: '08:00', hasta: '18:00' },
    { dia: 5, desde: '08:00', hasta: '18:00' },
    { dia: 6, desde: '08:00', hasta: '12:00' },
  ],
  feriados: [] as string[],
};

/**
 * Spec §6.1: Alta 1 h / 8 h · Media 4 h / 24 h · Baja 8 h / 72 h.
 * Se guardan en minutos porque el reloj de SLA corre en minutos.
 */
export const SLA_DEFAULT = [
  { nombre: 'Alta', prioridad: 'alta', min_primera_respuesta: 60, min_resolucion: 480 },
  { nombre: 'Media', prioridad: 'media', min_primera_respuesta: 240, min_resolucion: 1440 },
  { nombre: 'Baja', prioridad: 'baja', min_primera_respuesta: 480, min_resolucion: 4320 },
] as const;
