import { useState, useEffect } from 'react';
import { ProtocolYAML } from './types';

const protocols: Record<string, ProtocolYAML> = {
  'rcp-adulto': {
    id: 'rcp-adulto',
    titulo: 'Reanimación Cardiopulmonar - Adulto',
    categoria: 'soporte-vital-basico',
    urgencia: 'critica',
    version: '2024.1',
    descripcion: 'Protocolo de RCP básica y avanzada en adulto según ERC 2021',
    fases: [
      {
        id: '1',
        nombre: 'Seguridad y Valoración',
        icono: 'shield',
        tipo: 'checklist',
        descripcion: 'Evaluación inicial de la escena y el paciente',
        items: [
          { texto: 'Verificar seguridad del entorno', critico: true },
          { texto: 'Asegurar EPIs (guantes, mascarilla)' },
          { texto: 'Solicitar DEA si está disponible' },
          { texto: 'Activar código parada' },
        ],
      },
      {
        id: '2',
        nombre: 'Valoración de Consciencia',
        icono: 'brain',
        tipo: 'decision',
        pregunta: '¿Responde a estímulos?',
        ramas: [
          { condicion: 'sí', destino: '3' },
          { condicion: 'no', destino: '4' },
        ],
      },
      {
        id: '3',
        nombre: 'Valoración de Respiración',
        icono: 'lungs',
        tipo: 'decision',
        pregunta: '¿Respira normalmente?',
        descripcion: 'Observar, oír y sentir durante no más de 10 segundos',
        ramas: [
          { condicion: 'sí', destino: '5' },
          { condicion: 'no', destino: '4' },
        ],
      },
      {
        id: '4',
        nombre: 'Iniciar Compresiones',
        icono: 'heart',
        tipo: 'tecnica',
        descripcion: 'Iniciar RCP inmediatamente',
        parametros: [
          { label: 'Punto', valor: 'Centro del pecho', destacado: true },
          { label: 'Profundidad', valor: '5-6 cm', destacado: true },
          { label: 'Frecuencia', valor: '100-120/min', destacado: true },
          { label: 'Ratio', valor: '30:2' },
          { label: 'Permitir expansión', valor: 'Completa' },
        ],
      },
      {
        id: '5',
        nombre: 'Posición de Recuperación',
        icono: 'user',
        tipo: 'checklist',
        descripcion: 'Si respira pero está inconsciente',
        items: [
          { texto: 'Abrir vía aérea' },
          { texto: 'Posición lateral de seguridad' },
          { texto: 'Monitorizar hasta consciente' },
          { texto: 'No dejar solo' },
        ],
      },
      {
        id: '6',
        nombre: 'Uso del DEA',
        icono: 'first-aid',
        tipo: 'tecnica',
        descripcion: 'Cuando el DEA esté disponible',
        parametros: [
          { label: 'Colocación', valor: 'Electrodos en tórax despejado' },
          { label: 'Análisis', valor: 'Seguir instrucciones voz' },
          { label: 'Descarga', valor: 'Si indica, administrar 150-200J' },
          { label: 'Post-descarga', valor: 'Reanudar RCP 2 min' },
        ],
      },
    ],
    farmacos: [
      {
        nombre: 'Adrenalina',
        via: 'IV/IO',
        dosis: '1 mg (1:10.000)',
        intervalo: 'Cada 3-5 minutos',
        indicacion: 'A partir del 2º ciclo de RCP',
        critico: true,
      },
      {
        nombre: 'Amiodarona',
        via: 'IV',
        dosis: '300 mg',
        intervalo: 'Primera dosis, luego 150 mg',
        indicacion: 'FV/TVSP refractaria tras 3 descargas',
        critico: true,
      },
    ],
    equipamiento: ['DEA', 'Mascarilla facial', 'Bolsa-valva', 'Oxígeno', 'Tubo orofaríngeo', 'Acceso venoso'],
  },
  'anafilaxia': {
    id: 'anafilaxia',
    titulo: 'Reacción Anafiláctica',
    categoria: 'emergencias-alergicas',
    urgencia: 'critica',
    version: '2024.1',
    descripcion: 'Manejo de la reacción alérgica grave según protocolo SEMES',
    fases: [
      {
        id: '1',
        nombre: 'Reconocimiento',
        icono: 'alert-triangle',
        tipo: 'checklist',
        descripcion: 'Identificar signos de anafilaxia',
        items: [
          { texto: 'Exposición a alérgeno conocido (alimento, fármaco, picadura)', critico: true },
          { texto: 'Afectación cutánea (urticaria, angioedema, eritema)' },
          { texto: 'Afectación respiratoria (disnea, sibilancias, estridor)' },
          { texto: 'Afectación cardiovascular (hipotensión, taquicardia, mareo)' },
          { texto: 'Afectación gastrointestinal (náuseas, dolor abdominal)' },
        ],
      },
      {
        id: '2',
        nombre: 'Activar Emergencias',
        icono: 'first-aid',
        tipo: 'tecnica',
        descripcion: 'Activar protocolo de emergencia',
        parametros: [
          { label: 'Acción', valor: 'Llamar al 112', destacado: true },
          { label: 'Notificar', valor: 'Código anafilaxia' },
          { label: 'Tiempo', valor: 'Inmediato' },
        ],
      },
      {
        id: '3',
        nombre: 'Adrenalina IM',
        icono: 'pill',
        tipo: 'tecnica',
        descripcion: 'Primera línea de tratamiento',
        parametros: [
          { label: 'Dosis adulto', valor: '0.3-0.5 mg IM', destacado: true },
          { label: 'Dosis pediátrico', valor: '0.01 mg/kg (máx 0.3 mg)', destacado: true },
          { label: 'Concentración', valor: '1:1000 (1 mg/ml)' },
          { label: 'Punto', valor: 'Cara anterolateral muslo' },
          { label: 'Repetir', valor: 'Cada 5-15 min si no respuesta' },
        ],
        items: [
          { texto: 'NO retrasar administración', critico: true },
          { texto: 'Preferible IM que SC' },
        ],
      },
      {
        id: '4',
        nombre: 'Posicionamiento',
        icono: 'user',
        tipo: 'decision',
        pregunta: '¿Hay hipotensión o shock?',
        ramas: [
          { condicion: 'sí', destino: '5' },
          { condicion: 'no', destino: '6' },
        ],
      },
      {
        id: '5',
        nombre: 'Posición de Shock',
        icono: 'pulse',
        tipo: 'tecnica',
        descripcion: 'Elevar piernas',
        parametros: [
          { label: 'Posición', valor: 'Decúbito supino + piernas elevadas' },
          { label: 'Si disnea', valor: 'Posición semisentada' },
          { label: 'NO elevar cabeza', valor: 'Si hay obstrucción vía aérea' },
        ],
      },
      {
        id: '6',
        nombre: 'Oxigenoterapia',
        icono: 'lungs',
        tipo: 'tecnica',
        parametros: [
          { label: 'Flujo', valor: '10-15 L/min', destacado: true },
          { label: 'Objetivo', valor: 'SpO2 > 94%' },
        ],
      },
      {
        id: '7',
        nombre: 'Vía Venosa',
        icono: 'first-aid',
        tipo: 'tecnica',
        parametros: [
          { label: 'Acción', valor: 'Canular vena periférica' },
          { label: 'Líquido', valor: 'Suero salino 0.9% o Ringer lactato' },
          { label: 'Velocidad', valor: '1-2 litros rápida si hipotensión' },
        ],
      },
      {
        id: '8',
        nombre: 'Monitorización',
        icono: 'pulse',
        tipo: 'checklist',
        items: [
          { texto: 'Constantes vitales cada 5 min' },
          { texto: 'Pulsioximetría continua' },
          { texto: 'Monitor ECG si disponible' },
        ],
      },
    ],
    farmacos: [
      {
        nombre: 'Adrenalina',
        via: 'IM',
        dosis: '0.3-0.5 mg (adulto)',
        intervalo: 'Cada 5-15 min',
        indicacion: 'Primera línea - NO retrasar',
        critico: true,
      },
      {
        nombre: 'Dexclorfeniramina',
        via: 'IV/IM',
        dosis: '5-10 mg',
        intervalo: 'Dosis única',
        indicacion: 'Complementario a adrenalina',
      },
      {
        nombre: 'Metilprednisolona',
        via: 'IV',
        dosis: '1-2 mg/kg',
        intervalo: 'Dosis única',
        indicacion: 'Prevención reacción bifásica',
        notas: ['Efecto tardío (4-6h)'],
      },
      {
        nombre: 'Salbutamol',
        via: 'Inhalatorio',
        dosis: '2-4 puff',
        intervalo: 'Repetir si precisa',
        indicacion: 'Si broncoespasmo',
      },
    ],
    equipamiento: [
      'Mascarilla con reservorio',
      'Oxígeno',
      'Catéteres intravenosos',
      'Suero fisiológico',
      'Jeringas y agujas',
      'Tensiómetro',
      'Pulsioxímetro',
    ],
  },
};

export function useProtocol(id: string) {
  const [protocol, setProtocol] = useState<ProtocolYAML | null>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    const loadProtocol = async () => {
      setLoading(true);
      try {
        await new Promise((resolve) => setTimeout(resolve, 100));
        const data = protocols[id];
        if (data) {
          setProtocol(data);
          setError(null);
        } else {
          setError(`Protocolo ${id} no encontrado`);
        }
      } catch (err) {
        setError(err instanceof Error ? err.message : 'Error cargando protocolo');
      } finally {
        setLoading(false);
      }
    };

    loadProtocol();
  }, [id]);

  return { protocol, loading, error };
}

export function useProtocolList() {
  const [list, setList] = useState<{ id: string; titulo: string; urgencia: string }[]>([]);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    setList(
      Object.values(protocols).map((p) => ({
        id: p.id,
        titulo: p.titulo,
        urgencia: p.urgencia,
      }))
    );
    setLoading(false);
  }, []);

  return { list, loading };
}