export type DrugCategory = 'cardiovascular' | 'respiratorio' | 'neurologico' | 'analgesia' | 'otros';
export type AdministrationRoute = 'IV' | 'IM' | 'SC' | 'IO' | 'Nebulizado' | 'SL' | 'Rectal' | 'Nasal';

export interface Drug {
  id: string;
  genericName: string;
  tradeName: string;
  category: DrugCategory;
  presentation: string;
  adultDose: string;
  pediatricDose?: string;
  routes: AdministrationRoute[];
  dilution?: string;
  indications: string[];
  contraindications: string[];
  sideEffects?: string[];
  antidote?: string;
  notes?: string[];
  criticalPoints?: string[]; // Puntos TES críticos específicos
  source?: string; // Fuente del manual
}

export const drugs: Drug[] = [
  {
    id: 'oxigeno',
    genericName: 'Oxígeno (O₂)',
    tradeName: 'Oxígeno medicinal',
    category: 'oxigenoterapia',
    presentation: 'Gas medicinal. Balas de 2L, 5L, 10L, 15L. Concentración variable según dispositivo.',
    adultDose: 'Mascarilla con reservorio: 10-15 L/min (FiO₂ ~85%). Mascarilla simple: 5-10 L/min (FiO₂ ~40-60%). Gafas nasales: 1-6 L/min (FiO₂ 24-44%).',
    pediatricDose: 'Ajustar por respuesta. Gafas nasales: 1-4 L/min. Mascarilla simple: 5-8 L/min. En lactantes, evitar flujos >4L/min por riesgo de retinopatía.',
    routes: ['Inhalatoria'],
    indications: [
      'Hipoxia (SpO₂ <94%)',
      'Parada cardiorrespiratoria',
      'Ictus',
      'Síndrome Coronario Agudo',
      'Trauma grave',
    ],
    contraindications: [
      'En EPOC conocida con riesgo de hipercapnia: usar Venturi 28% y titular a SpO₂ 88-92%',
    ],
    notes: [
      'NO es un fármaco inocuo',
      'Humedecer si uso prolongado >2h',
      'En EPOC conocida: usar Venturi 28% y titular a SpO₂ 88-92%',
    ],
    criticalPoints: [
      'Terapia, no placebo. Usarlo con indicación y precaución en EPOC',
      'En EPOC conocida con riesgo de hipercapnia, usar Venturi 28% y titular a SpO₂ 88-92%',
    ],
    source: 'BLOQUE_06_1_VADEMECUM_OPERATIVO.md'
  },
  {
    id: 'adrenalina',
    genericName: 'Adrenalina (Epinefrina)',
    tradeName: 'Adrenalina Braun®',
    category: 'cardiovascular',
    presentation: 'ANAFILAXIA: Ampolla 1 mg/1 ml (1:1000). PCR: Ampolla 1 mg/10 ml (1:10.000). ¡LEER ETIQUETA EN VOZ ALTA!',
    adultDose: 'ANAFILAXIA: 0.5 mg IM (0.5 ml de ampolla 1:1000). Repetir a los 5 min si no mejora. PCR: 1 mg IV/IO (10 ml de ampolla 1:10.000) cada 3-5 min.',
    pediatricDose: 'ANAFILAXIA: 0.01 mg/kg IM (Máx. 0.5 mg). Ej: 20kg → 0.2 mg = 0.2 ml. PCR: 0.01 mg/kg IV/IO (o según protocolo local).',
    routes: ['IM', 'IV', 'IO'],
    dilution: 'ANAFILAXIA: Sin diluir. PCR: Sin diluir (usar ampolla 1:10.000 directamente).',
    indications: [
      'Anafilaxia grave: Reacción alérgica sistémica con afectación respiratoria (estridor, sibilancias, disnea) y/o cardiovascular (hipotensión, taquicardia, colapso)',
      'Parada cardiorrespiratoria: Cualquier ritmo (FV/TVSP, AESP, ACR) como parte del algoritmo SVA, una vez establecida vía IV/IO',
    ],
    contraindications: [
      'No hay contraindicaciones absolutas en emergencias vitales',
      'Paciente anciano o con cardiopatía isquémica: El beneficio en anafilaxia grave supera el riesgo. Administrar y monitorizar estrechamente',
    ],
    sideEffects: ['Temblor', 'Taquicardia', 'Palidez', 'HTA', 'Arritmias'],
    notes: [
      '⚠️ CONCENTRACIÓN CRÍTICA: 1:1000 (1 mg/ml) para Anafilaxia IM. 1:10.000 (0.1 mg/ml) para PCR IV/IO',
      'ANAFILAXIA: Fármaco salvavidas. Administración IM precoz es la intervención más importante. No esperar',
      'ANAFILAXIA: Sitio IM = TERCIO MEDIO DEL VASTO EXTERNO (muslo lateral). Alternativa: deltoides',
      'ANAFILAXIA: Técnica IM: Aguja perpendicular (90º), inyección con decisión, no masajear zona',
      'ANAFILAXIA: Efectos adversos esperados (temblor, taquicardia, palidez) NO son motivo para retener la dosis',
      'ANAFILAXIA: Valorar respuesta a los 2-3 min. Si NO hay mejoría a los 5 MIN, preparar segunda dosis en otro muslo',
      'PCR: La adrenalina es secundaria a RCP de alta calidad y desfibrilación temprana',
      'PCR: Administrar durante pausa mínima en compresiones, seguido de lavado con 20 ml SSF',
      'PCR: Reanudar compresiones inmediatamente tras administración',
      'PCR: Repetir cada 3-5 minutos mientras persista la PCR',
      'PEDIATRÍA: Calcular estrictamente por peso. Un error decimal es grave. Usar calculadora y verificar',
      'EMBARAZO: La adrenalina es el tratamiento de elección. Salva a la madre y al feto. Administrar IM en vasto externo',
      'BETABLOQUEANTES: Pueden tener respuesta atenuada o reacción bifásica. Notificar en el parte',
    ],
    criticalPoints: [
      '⚠️ ERROR CRÍTICO: Confundir 1:1000 con 1:10.000. Administrar 1 mg/ml (1:1000) por vía IV en PCR equivale a 10 mg (LETAL)',
      '⚠️ ERROR CRÍTICO: Retrasar administración en anafilaxia por "ver si mejora". El tratamiento es URGENTE',
      '⚠️ ERROR CRÍTICO: No preparar segunda dosis en anafilaxia cuando no hay respuesta. Es frecuentemente necesaria',
      '⚠️ ERROR CRÍTICO: Administrar IM por vía subcutánea. La absorción es más lenta e inefectiva',
      '⚠️ ERROR CRÍTICO: Administrar IV/IO en PCR sin asegurar RCP de alta calidad. El fármaco no circula sin compresiones efectivas',
      '⚠️ ERROR CRÍTICO: No verificar peso pediátrico y adivinar la dosis',
      '⚠️ ERROR CRÍTICO: Documentar "1 ampolla" en lugar de dosis exacta en mg y ml',
      'Anafilaxia: 1:1000 IM en el MUSLO. 0.5 mg adultos, 0.01 mg/kg niños. Repetir a los 5 min si no mejora',
      'PCR: 1:10.000 IV/IO. 1 mg adultos, 0.01 mg/kg niños. Cada 3-5 min',
      '¡CONCENTRACIÓN! Es lo primero que compruebas al coger la ampolla. Grítala en voz alta',
      'La vía IM para anafilaxia es segura y rápida. No temas a sus efectos adversos leves; son signo de que el fármaco actúa',
      'En PCR, la adrenalina es un acompañante de la RCP, no su sustituto. Primero compresiones y DESA',
    ],
    source: 'BLOQUE_06_3_ADRENALINA.md'
  },
  {
    id: 'amiodarona',
    source: 'Vademécum base',
    genericName: 'Amiodarona',
    tradeName: 'Trangorex®',
    category: 'cardiovascular',
    presentation: '150 mg/3 ml (ampolla)',
    adultDose: 'FV/TVSP: 300mg IV en bolo | Mantenimiento: 900mg/24h',
    pediatricDose: '5 mg/kg IV/IO (máx 300mg)',
    routes: ['IV', 'IO'],
    dilution: 'Diluir en SG5% (precipita con SSF)',
    indications: [
      'FV/TVSP refractaria a descargas',
      'Taquicardia ventricular estable',
      'Control de frecuencia en FA',
    ],
    contraindications: [
      'Bradicardia sinusal',
      'Bloqueo AV 2º-3º grado sin marcapasos',
      'Disfunción tiroidea severa',
      'Hipersensibilidad al yodo',
    ],
    sideEffects: ['Hipotensión', 'Bradicardia', 'Flebitis'],
    notes: [
      'Segunda dosis en PCR: 150mg si persiste FV/TVSP',
      'Usar vía central si es posible',
    ],
  },
  {
    id: 'atropina',
    genericName: 'Atropina',
    tradeName: 'Atropina Braun®',
    category: 'cardiovascular',
    presentation: '1 mg/1 ml (ampolla)',
    adultDose: 'Bradicardia: 0.5mg IV cada 3-5 min (máx 3mg)',
    pediatricDose: '0.02 mg/kg IV (mín 0.1mg, máx 0.5mg)',
    routes: ['IV', 'IO', 'IM'],
    indications: [
      'Bradicardia sintomática',
      'Intoxicación por organofosforados',
      'Premedicación antes de IOT',
    ],
    contraindications: [
      'Glaucoma de ángulo estrecho',
      'Retención urinaria',
      'Íleo paralítico',
    ],
    sideEffects: ['Taquicardia', 'Sequedad de boca', 'Retención urinaria', 'Midriasis'],
    antidote: 'Fisostigmina',
    notes: [
      'Dosis <0.5mg pueden causar bradicardia paradójica',
      'Ya NO se usa en PCR según guías actuales',
    ],
  },
  {
    id: 'midazolam',
    source: 'Vademécum base',
    genericName: 'Midazolam',
    tradeName: 'Dormicum®',
    category: 'neurologico',
    presentation: '15 mg/3 ml o 5 mg/5 ml (ampolla)',
    adultDose: 'Sedación: 1-2.5mg IV titulando | Crisis: 10mg IM/Intranasal',
    pediatricDose: 'Crisis: 0.2-0.3 mg/kg intranasal/bucal (máx 10mg)',
    routes: ['IV', 'IM', 'Nasal', 'Rectal'],
    dilution: 'Puede administrarse sin diluir IV lento',
    indications: [
      'Status epiléptico',
      'Sedación para procedimientos',
      'Premedicación anestésica',
      'Agitación severa',
    ],
    contraindications: [
      'Miastenia gravis',
      'Insuficiencia respiratoria severa',
      'Shock',
    ],
    sideEffects: ['Depresión respiratoria', 'Hipotensión', 'Amnesia'],
    antidote: 'Flumazenilo',
    notes: [
      'En crisis: vía intranasal con atomizador (MAD)',
      'Inicio de acción IV: 1-2 min, IM/IN: 5-10 min',
    ],
  },
  {
    id: 'salbutamol',
    genericName: 'Salbutamol',
    tradeName: 'Ventolin®',
    category: 'respiratorio',
    presentation: 'Nebulización: 5 mg/ml | MDI: 100 mcg/puff',
    adultDose: 'Nebulización: 2.5-5mg | MDI: 4-8 puffs con cámara',
    pediatricDose: 'Nebulización: 2.5mg (<20kg) o 5mg (>20kg) | MDI: 4-6 puffs',
    routes: ['Nebulizado'],
    dilution: 'Diluir en 3ml de SSF para nebulizar',
    indications: [
      'Crisis asmática',
      'EPOC reagudizado',
      'Broncoespasmo',
      'Hiperpotasemia (coadyuvante)',
    ],
    contraindications: [
      'Hipersensibilidad conocida',
      'Usar con precaución en cardiopatía isquémica',
    ],
    sideEffects: ['Taquicardia', 'Temblor', 'Hipopotasemia', 'Nerviosismo'],
    notes: [
      'En crisis grave: nebulización continua',
      'Puede repetirse cada 20 min las primeras horas',
      'Asociar ipratropio en crisis moderada-grave',
    ],
  },
];

export const getDrugsByCategory = (category: DrugCategory): Drug[] => {
  return drugs.filter((d) => d.category === category);
};

export const getDrugById = (id: string): Drug | undefined => {
  return drugs.find((d) => d.id === id);
};

export const searchDrugs = (query: string): Drug[] => {
  const lowerQuery = query.toLowerCase();
  return drugs.filter(
    (d) =>
      d.genericName.toLowerCase().includes(lowerQuery) ||
      d.tradeName.toLowerCase().includes(lowerQuery) ||
      d.indications.some((i) => i.toLowerCase().includes(lowerQuery))
  );
};
