-- ============================================
-- SCRIPT SQL: LIMPIAR DATOS DE PRUEBA - VERSIÓN ACTUALIZADA
-- Sistema: HC MEDICA
-- Fecha: 2026-01-07
-- ============================================
-- ⚠️  ADVERTENCIA CRÍTICA ⚠️
-- Este script eliminará TODOS los datos de prueba del sistema:
-- - Todas las atenciones médicas
-- - Todos los pacientes (excepto los que sean usuarios del sistema)
-- - Todas las recetas, certificados y solicitudes de examen
-- - Todos los registros de triaje e imágenes
-- 
-- PRESERVARÁ:
-- ✅ Usuarios del sistema
-- ✅ Configuración general
-- ✅ Certificados digitales (.p12)
-- ✅ Catálogo de medicamentos
-- ✅ Catálogo CIE-10 de diagnósticos
-- ✅ Servicios médicos
-- 
-- IMPORTANTE: Ejecutar con precaución. Se recomienda hacer backup antes.
-- ============================================

-- Mostrar inicio del proceso
SELECT '============================================' AS '';
SELECT '   INICIANDO LIMPIEZA DE DATOS DE PRUEBA   ' AS '';
SELECT '============================================' AS '';
SELECT '' AS '';

-- Deshabilitar verificación de claves foráneas temporalmente
SET FOREIGN_KEY_CHECKS = 0;
SELECT '✓ Verificación de claves foráneas deshabilitada' AS 'Estado';

-- ============================================
-- 1. LIMPIAR SOLICITUDES DE EXAMEN
-- ============================================
SELECT '' AS '';
SELECT '>>> 1. Limpiando solicitudes de examen...' AS 'Proceso';
TRUNCATE TABLE `solicitud_examen`;
SELECT '  ✓ Tabla solicitud_examen limpiada' AS 'Resultado';

-- ============================================
-- 2. LIMPIAR CERTIFICADOS MÉDICOS GENERADOS
-- ============================================
SELECT '' AS '';
SELECT '>>> 2. Limpiando certificados médicos generados...' AS 'Proceso';
TRUNCATE TABLE `documento_medico`;
SELECT '  ✓ Tabla documento_medico limpiada' AS 'Resultado';

-- ============================================
-- 3. LIMPIAR RECETAS MÉDICAS
-- ============================================
SELECT '' AS '';
SELECT '>>> 3. Limpiando recetas médicas...' AS 'Proceso';
TRUNCATE TABLE `receta`;
SELECT '  ✓ Tabla receta limpiada' AS 'Resultado';

-- ============================================
-- 4. LIMPIAR HISTORIAS CLÍNICAS / ATENCIONES
-- ============================================
SELECT '' AS '';
SELECT '>>> 4. Limpiando historias clínicas y atenciones...' AS 'Proceso';

-- Limpiar diagnósticos detallados
TRUNCATE TABLE `detalle_diagnostico`;
SELECT '  ✓ Tabla detalle_diagnostico limpiada' AS 'Resultado';

-- Limpiar resultados de consulta (evolución)
TRUNCATE TABLE `resultado`;
SELECT '  ✓ Tabla resultado limpiada' AS 'Resultado';

-- Limpiar datos de triaje
TRUNCATE TABLE `triaje`;
SELECT '  ✓ Tabla triaje limpiada' AS 'Resultado';

-- Limpiar imágenes adjuntas
TRUNCATE TABLE `imagenes`;
SELECT '  ✓ Tabla imagenes limpiada' AS 'Resultado';

-- Finalmente limpiar atenciones principales
TRUNCATE TABLE `atencion`;
SELECT '  ✓ Tabla atencion limpiada' AS 'Resultado';

-- ============================================
-- 5. LIMPIAR CITAS/AGENDA
-- ============================================
SELECT '' AS '';
SELECT '>>> 5. Limpiando agenda y citas...' AS 'Proceso';
TRUNCATE TABLE `agenda_local`;
SELECT '  ✓ Tabla agenda_local limpiada' AS 'Resultado';

-- ============================================
-- 6. LIMPIAR PACIENTES DE PRUEBA
-- ============================================
SELECT '' AS '';
SELECT '>>> 6. Limpiando pacientes de prueba...' AS 'Proceso';
SELECT '  ⚠️  IMPORTANTE: Se eliminarán TODOS los pacientes que NO sean usuarios del sistema' AS 'Advertencia';

-- Contar pacientes antes de eliminar
SELECT CONCAT('  📊 Total de pacientes antes: ', COUNT(*)) AS 'Información' FROM `persona`;
SELECT CONCAT('  📊 Usuarios del sistema (se preservarán): ', COUNT(*)) AS 'Información' FROM `usuario`;

-- Eliminar pacientes que no son usuarios del sistema
DELETE FROM `persona` WHERE `idpersona` NOT IN (SELECT `idusuario` FROM `usuario`);
SELECT CONCAT('  ✓ Pacientes eliminados: ', ROW_COUNT()) AS 'Resultado';

-- Mostrar pacientes restantes
SELECT CONCAT('  📊 Total de pacientes después: ', COUNT(*)) AS 'Información' FROM `persona`;

-- ============================================
-- 7. RESETEAR AUTO_INCREMENT
-- ============================================
SELECT '' AS '';
SELECT '>>> 7. Reseteando contadores AUTO_INCREMENT...' AS 'Proceso';

ALTER TABLE `solicitud_examen` AUTO_INCREMENT = 1;
ALTER TABLE `documento_medico` AUTO_INCREMENT = 1;
ALTER TABLE `receta` AUTO_INCREMENT = 1;
ALTER TABLE `detalle_diagnostico` AUTO_INCREMENT = 1;
ALTER TABLE `resultado` AUTO_INCREMENT = 1;
ALTER TABLE `triaje` AUTO_INCREMENT = 1;
ALTER TABLE `imagenes` AUTO_INCREMENT = 1;
ALTER TABLE `atencion` AUTO_INCREMENT = 1;
ALTER TABLE `agenda_local` AUTO_INCREMENT = 1;
ALTER TABLE `persona` AUTO_INCREMENT = 1;

SELECT '  ✓ Contadores AUTO_INCREMENT reseteados correctamente' AS 'Resultado';

-- ============================================
-- 8. REACTIVAR VERIFICACIÓN DE CLAVES FORÁNEAS
-- ============================================
SELECT '' AS '';
SELECT '>>> 8. Reactivando verificación de claves foráneas...' AS 'Proceso';
SET FOREIGN_KEY_CHECKS = 1;
SELECT '  ✓ Verificación de claves foráneas reactivada' AS 'Resultado';

-- ============================================
-- 9. VERIFICACIÓN FINAL - DATOS PRESERVADOS
-- ============================================
SELECT '' AS '';
SELECT '============================================' AS '';
SELECT '   VERIFICACIÓN DE DATOS PRESERVADOS   ' AS '';
SELECT '============================================' AS '';

SELECT CONCAT('✅ Usuarios del sistema: ', COUNT(*)) AS 'Datos Preservados' FROM `usuario`;
SELECT CONCAT('✅ Configuración general: ', COUNT(*)) AS 'Datos Preservados' FROM `configuracion`;
SELECT CONCAT('✅ Certificados digitales: ', COUNT(*)) AS 'Datos Preservados' FROM `certificados_medicos`;
SELECT CONCAT('✅ Medicamentos (catálogo): ', COUNT(*)) AS 'Datos Preservados' FROM `cuadro_basico_medicamentos`;
SELECT CONCAT('✅ Diagnósticos CIE-10: ', COUNT(*)) AS 'Datos Preservados' FROM `diagnostico`;

-- ============================================
-- 10. VERIFICACIÓN FINAL - DATOS ELIMINADOS
-- ============================================
SELECT '' AS '';
SELECT '============================================' AS '';
SELECT '   VERIFICACIÓN DE DATOS ELIMINADOS   ' AS '';
SELECT '============================================' AS '';

SELECT CONCAT('🗑️  Atenciones médicas: ', COUNT(*)) AS 'Datos Eliminados (debe ser 0)' FROM `atencion`;
SELECT CONCAT('🗑️  Recetas: ', COUNT(*)) AS 'Datos Eliminados (debe ser 0)' FROM `receta`;
SELECT CONCAT('🗑️  Certificados generados: ', COUNT(*)) AS 'Datos Eliminados (debe ser 0)' FROM `documento_medico`;
SELECT CONCAT('🗑️  Solicitudes de examen: ', COUNT(*)) AS 'Datos Eliminados (debe ser 0)' FROM `solicitud_examen`;
SELECT CONCAT('🗑️  Registros de triaje: ', COUNT(*)) AS 'Datos Eliminados (debe ser 0)' FROM `triaje`;
SELECT CONCAT('🗑️  Pacientes restantes: ', COUNT(*)) AS 'Solo usuarios del sistema' FROM `persona`;

-- ============================================
-- RESUMEN FINAL
-- ============================================
SELECT '' AS '';
SELECT '============================================' AS '';
SELECT '   ✅ LIMPIEZA COMPLETADA EXITOSAMENTE ✅   ' AS '';
SELECT '============================================' AS '';
SELECT '' AS '';
SELECT '📋 Resumen de la operación:' AS '';
SELECT '   • Todos los datos de prueba han sido eliminados' AS '';
SELECT '   • Las configuraciones del sistema están intactas' AS '';
SELECT '   • Los certificados digitales se han preservado' AS '';
SELECT '   • Los catálogos de medicamentos y diagnósticos están completos' AS '';
SELECT '   • El sistema está listo para nuevos registros' AS '';
SELECT '' AS '';
SELECT '⚠️  IMPORTANTE: Revisa la verificación anterior para confirmar' AS '';
SELECT '   que solo quedan los datos que deberían preservarse' AS '';
SELECT '' AS '';
SELECT '============================================' AS '';
