import { useHospitalStore } from '@/hooks/useHospitalStore';
import { Layout } from '@/sections/Layout';
import { toast } from 'sonner';
import { Dashboard } from '@/sections/Dashboard';
import { MapaCamas } from '@/sections/MapaCamas';
import { Pacientes } from '@/sections/Pacientes';
import { Internaciones } from '@/sections/Internaciones';
import { Evoluciones } from '@/sections/Evoluciones';
import { AcidoBaseSection } from '@/sections/AcidoBase';
import { Cultivos } from '@/sections/Cultivos';
import { HistoriaClinica } from '@/sections/HistoriaClinica';
import { NuevoIngreso } from '@/sections/NuevoIngreso';
import { EditIngreso } from '@/sections/EditIngreso';
import { Login } from '@/sections/Login';
import { GestionUsuarios } from '@/sections/GestionUsuarios';
import { Spinner } from '@/components/ui/spinner';
import { Button } from '@/components/ui/button';
import { ThemeProvider } from "@/components/theme-provider";
import { Toaster } from '@/components/ui/sonner';
import type { Indicacion, MovimientoIndicacion } from '@/types';
function AppContent() {
const store = useHospitalStore();
if (!store.isLoaded) {
return (
);
}
if (!store.isAuthenticated) {
return ;
}
const renderVista = () => {
switch (store.vistaActual) {
case 'dashboard':
return (
);
case 'camas':
return (
);
case 'pacientes':
return (
);
case 'internaciones':
return (
{ store.setCurrentInternacion(id); store.setVista('historiaclinica'); }}
onNuevoIngreso={() => store.setVista('nuevoingreso')}
/>
);
case 'evoluciones':
return (
);
case 'acidobase':
return (
);
case 'cultivos':
return (
);
case 'historiaclinica': {
const internacionId = store.currentInternacionId || sessionStorage.getItem('hospital_current_internacion_id') || '';
const internacion = store.getInternacionById(internacionId);
const paciente = internacion
? (store.getPacienteById(internacion.pacienteId) || store.pacientes.find(p => p.id === internacion.pacienteId || p.dni === internacion.pacienteId) || {
id: internacion.pacienteId || 'paciente-unknown',
apellido: 'Paciente',
nombre: 'Sin registrar',
dni: internacion.pacienteId || 'N/A',
fechaNacimiento: '1990-01-01',
sexo: 'Otro' as const,
fechaRegistro: new Date().toISOString()
})
: undefined;
if (!internacion) {
if (!store.isLoaded) {
return (
Cargando información de la internación...
);
}
return (
Internación no encontrada (id: {internacionId})
);
}
return (
e.internacionId === internacion.id)}
interconsultas={(store.interconsultas || []).filter(ic => ic.internacionId === internacion.id)}
atb={(store.atb || []).filter(a => a.internacionId === internacion.id)}
onAgregarEvolucion={store.agregarEvolucion}
onActualizarEvolucion={store.actualizarEvolucion}
onEliminarEvolucion={store.eliminarEvolucion}
onAgregarLaboratorio={(l) => store.agregarLaboratorio({ ...l, internacionId: internacion.id })}
onActualizarLaboratorio={store.actualizarLaboratorio}
onEliminarLaboratorio={store.eliminarLaboratorio}
onAgregarGlucemia={(g) => store.agregarGlucemia({ ...g, internacionId: internacion.id })}
onActualizarGlucemia={store.actualizarGlucemia}
onEliminarGlucemia={store.eliminarGlucemia}
onAgregarAcidoBase={(a) => store.agregarAcidoBase({ ...a, internacionId: internacion.id })}
onActualizarAcidoBase={store.actualizarAcidoBase}
onEliminarAcidoBase={store.eliminarAcidoBase}
onAgregarCultivo={(c) => store.agregarCultivo({ ...c, internacionId: internacion.id })}
onActualizarCultivo={store.actualizarCultivo}
onEliminarCultivo={store.eliminarCultivo}
onAgregarEstudioComplementario={(e) => store.agregarEstudioComplementario({ ...e, internacionId: internacion.id })}
onActualizarEstudioComplementario={store.actualizarEstudioComplementario}
onEliminarEstudioComplementario={store.eliminarEstudioComplementario}
onAgregarInterconsulta={(ic) => store.agregarInterconsulta({ ...ic, internacionId: internacion.id })}
onActualizarInterconsulta={store.actualizarInterconsulta}
onEliminarInterconsulta={store.eliminarInterconsulta}
onAgregarATB={(atb) => store.agregarATB({ ...atb, internacionId: internacion.id })}
onActualizarATB={store.actualizarATB}
onEliminarATB={store.eliminarATB}
indicadores={(Array.isArray(store.indicaciones) ? store.indicaciones : []).filter((i: Indicacion) => i.internacionId === internacion.id)}
movimientos={store.getMovimientosByInternacion ? store.getMovimientosByInternacion(internacion.id) : []}
onAgregarIndicacion={(i) => store.agregarIndicacion({ ...i, internacionId: internacion.id })}
onActualizarIndicacion={store.actualizarIndicacion}
onEliminarIndicacion={store.eliminarIndicacion}
onAgregarMovimiento={(m: MovimientoIndicacion) => store.agregarMovimientoIndicacion ? store.agregarMovimientoIndicacion({ ...m, internacionId: internacion.id }) : null}
onActualizarInternacion={store.actualizarInternacion}
onActualizarCama={store.actualizarCama}
onVolver={() => store.setVista('internaciones')}
onEditarIngreso={() => {
if (store.canEditIngreso(internacion.id)) {
store.setVista('editaringreso');
} else {
toast.error(`Solo el usuario que creó esta internación (${internacion.medicoIngresante}) puede modificar el ingreso.`);
}
}}
canEdit={store.canEditInternacion(internacion.id)}
/>
);
}
case 'nuevoingreso':
return (
store.setVista('internaciones')}
getGrupoName={(grupoId) => store.grupos.find(a => a.id === grupoId)?.nombre || ''}
internaciones={store.internaciones}
/>
);
case 'editaringreso': {
const internacionId = store.currentInternacionId || sessionStorage.getItem('hospital_current_internacion_id') || '';
const internacion = store.getInternacionById(internacionId);
const paciente = internacion
? (store.getPacienteById(internacion.pacienteId) || store.pacientes.find(p => p.id === internacion.pacienteId || p.dni === internacion.pacienteId) || {
id: internacion.pacienteId || 'paciente-unknown',
apellido: 'Paciente',
nombre: 'Sin registrar',
dni: internacion.pacienteId || 'N/A',
fechaNacimiento: '1990-01-01',
sexo: 'Otro' as const,
fechaRegistro: new Date().toISOString()
})
: undefined;
if (!internacion) {
if (!store.isLoaded) {
return (
Cargando información de la internación...
);
}
return (
Internación no encontrada (id: {internacionId})
);
}
return (
store.setVista('historiaclinica')}
getGrupoName={(grupoId) => store.grupos.find(a => a.id === grupoId)?.nombre || ''}
/>
);
}
case 'usuarios':
if (store.currentUser?.rol !== 'admin') {
return (
No tiene permisos para acceder a esta sección.
);
}
return (
);
default:
return null;
}
};
return (
{renderVista()}
);
}
function App() {
return (
);
}
export default App;