// Tipos para el Sistema de Gestión Hospitalaria

export interface Paciente {
  id: string;
  nombre: string;
  apellido: string;
  dni: string;
  fechaNacimiento: string;
  sexo: 'M' | 'F' | 'Otro';
  telefono: string;
  email?: string;
  direccion?: string;
  grupoSanguineo?: string;
  alergias?: string;
  antecedentes?: string;
  fechaRegistro?: string;
  obraSocial?: string;
  nacionalidad?: string;
  medicacionHabitual?: string;
  historiaClinica?: string;
  notas?: string;
}


export interface Grupo {
  id: string;
  nombre: string;
}

export type Area = Grupo;

export interface Cama {
  id: string;
  numero: string;
  grupoId?: string;
  areaId?: string;
  tipo: 'General' | 'Aislamiento KPC' | 'Aislamiento COVID' | 'Aislamiento Clostridium' | 'Aislamiento Neutropenico' | 'Aislamiento TBC' | 'Aislamiento Escabiosis';
  estado: 'Disponible' | 'Ocupada' | 'Reparacion' | 'Reservada';
  pacienteId?: string;
  internacionId?: string;
  sector?: "En Área" | "Fuera de Área";
}

export interface Internacion {
  id: string;
  pacienteId: string;
  camaId: string;
  grupoId?: string;
  areaId?: string;
  fechaIngresoHospital?: string;
  fechaIngresoClinica?: string;
  fechaEgreso?: string;
  diagnosticoIngreso: string;
  motivoConsulta?: string;
  enfermedadActual: string;
  antecedentesEnfermedadActual?: string;
  diagnosticoEgreso?: string;
  medicoIngresante: string;
  motivoEgreso?: 'Alta médica' | 'Egreso Voluntario' | 'Derivación' | 'Obito' | 'Pase servicio' | 'Otro';
  servicioAlQuePasa?: string;
  activa: boolean;
  apache?: string;
  derivacion?: string;
}

export interface ExamenFisico {
  SNC?: string;
  Cardiovascular?: string;
  Respiratorio?: string;
  Abdominal?: string;
  Genitourinario?: string;
  PielAnexos?: string;
  SOMA?: string;
}

export interface Evolucion {
  id: string;
  internacionId: string;
  fecha: string;
  hora: string;
  medico: string;
  signosVitales?: SignosVitales;
  examenFisico?: ExamenFisico;
  novedades?: string;
  comentario?: string;
  pendientes?: string;
}

export interface SignosVitales {
  temperatura?: number;
  presionSistolica?: number;
  presionDiastolica?: number;
  frecuenciaCardiaca?: number;
  frecuenciaRespiratoria?: number;
  saturacionO2?: number;
  glucosa?: number;
  peso?: number;
  talla?: number;
  imc?: number;
}

export interface Laboratorio {
  id: string;
  pacienteId: string;
  internacionId?: string;
  sector?: "En Área" | "Fuera de Área";
  fecha: string;
  hora: string;
  tipo?: 'Hemograma' | 'Química sanguínea' | 'Urianálisis' | 'Coagulación' | 'Microbiología' | 'Inmunología' | 'Otros';
  resultados: ResultadoLaboratorio[];
  observaciones?: string;
  medicoSolicitante?: string;
}

export interface ResultadoLaboratorio {
  parametro: string;
  valor: number | string;
  unidad: string;
  valorReferencia?: string;
  estado: 'Normal' | 'Alto' | 'Bajo' | 'Crítico';
}

export interface OtroLaboratorio {
  id: string;
  pacienteId: string;
  internacionId?: string;
  fecha: string;
  hora?: string;
  observaciones: string;
  categoria?: 'Perfil Lipídico' | 'Perfil Tiroideo' | 'Autoinmunidad' | 'Toracocentesis' | 'Líquido Ascitico' | 'LCR' | 'Otros' | string;
}

export interface Glucemia {
  id: string;
  pacienteId: string;
  internacionId?: string;
  sector?: "En Área" | "Fuera de Área";
  fecha: string;
  hora: string;
  valor: number; // in mg%
  correccion: number; // in UI insulin
}

export interface AcidoBase {
  id: string;
  pacienteId: string;
  internacionId?: string;
  sector?: "En Área" | "Fuera de Área";
  fecha: string;
  hora: string;
  ph: number;
  pco2: number;
  po2: number;
  hco3: number;
  be: number;
  sato2: number;
  lactato?: number;
  fio2?: number;
  interpretacion?: string;
}

export interface Cultivo {
  id: string;
  pacienteId: string;
  internacionId?: string;
  sector?: "En Área" | "Fuera de Área";
  fechaToma: string;
  protocolo?: string;
  fechaResultado?: string;
  tipoMuestra: 'HMCx2' | 'RC' | 'PC' | 'UC' | 'LCR' | 'LP' | 'LAsc' | 'LAbd' | 'Coleccion' | 'Partes Blandas' | 'Esputo GC' | 'Esputo TBC' | 'Baciloscopia' | 'HNF Test Rápido' | 'HNF Panel PCR' | 'Hisopado Rectal KPC';
  germen?: string;
  sensible?: string;
  resistente?: string;
  estado: 'NAF/Pendiente' | 'Parcial' | 'Positivo' | 'Negativo';
  observaciones?: string;
}

export interface EstudioComplementario {
  id: string;
  pacienteId: string;
  internacionId?: string;
  sector?: "En Área" | "Fuera de Área";
  fecha: string;
  tipo: string;
  resultado: string;
}

export interface Interconsulta {
  id: string;
  pacienteId: string;
  internacionId: string;
  fecha: string;
  servicioInterconsultado: string;
  motivo?: string;
  respuestaInterconsulta?: string;
  respuestaFecha?: string;
}

export interface ATB {
  id: string;
  pacienteId: string;
  internacionId: string;
  antibiotico: string;
  fechaInicio: string;
  fechaFinalizacion?: string;
}

export type IndicacionTipo = 'Farmacologica' | 'Farmacologica Profilactica' | 'Farmacologica Antibiótico' | 'Farmacologica Insulina' | 'No Farmacologica' | 'PHP' | 'PHP Paralelo' | 'PHP Alterno';
export type TipoInsulina = 'NPH' | 'Glargina';
export type ViaAdministracion = 'Via Oral' | 'EV' | 'IM' | 'SC' | 'Por GGT' | 'Por SNG';
export type TipoPlanHidratacion = 'SF 0.9%' | 'Dextrosa 5%' | 'Dextrosa 10%' | 'Dextrosa 25%' | 'Ringer Lactato';

export interface Indicacion {
  id: string;
  internacionId: string;
  tipo: IndicacionTipo;
  droga?: string;
  dosis?: string;
  frecuenciaHoras?: number;
  via?: ViaAdministracion;
  indicacionNoFco?: string;
  tipoPlan?: TipoPlanHidratacion;
  tipoPlan2?: TipoPlanHidratacion;
  cantidadMl?: number;
  cantidadMl2?: number;
  tiempoHoras?: number;
  tipoInsulina?: TipoInsulina;
  unidadesDesayuno?: number;
  unidadesAlmuerzo?: number;
  unidadesNoche?: number;
  estado: 'Activa' | 'Suspendida';
  medicoCrea: string;
  fechaCrea: string;
  medicoModifica?: string;
  fechaModificacion?: string;
  medicoSuspende?: string;
  fechaSuspension?: string;
}

export interface MovimientoIndicacion {
  id: string;
  internacionId: string;
  indicacionId?: string;
  tipo: string;
  fecha: string;
  hora: string;
  medico: string;
  observaciones?: string;
}

export type Vista = 'dashboard' | 'camas' | 'pacientes' | 'internaciones' | 'evoluciones' | 'laboratorios' | 'acidobase' | 'cultivos' | 'historiaclinica' | 'nuevoingreso' | 'editaringreso' | 'usuarios' | 'pendientessala' | 'sistema';

export type RolUsuario = 'admin' | 'medico' | 'enfermero';

export interface Usuario {
  id: string;
  apellido: string;
  nombre: string;
  dni: string;
  fechaNacimiento: string;
  email: string;
  rol: RolUsuario;
  matriculaProfesional?: string;
  passwordHash: string;
  grupoId?: string;
  areaId?: string;
  fechaCreacion: string;
}

export interface Pendiente {
  id: string;
  pacienteId: string;
  internacionId?: string;
  descripcion: string;
  prioridad: 'alta' | 'media' | 'baja';
  estado: 'pendiente' | 'realizado' | 'cancelado';
  fechaCreacion: string;
  horaCreacion?: string;
  fechaRealizado?: string;
  categoria?: 'General' | 'Estudio' | 'Procedimiento' | 'Laboratorio' | 'Interconsulta' | 'Tratamiento' | 'Administrativo' | string;
  fechaProgramada?: string;
  horaProgramada?: string;
  usuarioId?: string;
  usuarioNombre?: string;
  observaciones?: string;
}
