-- Usar la base de datos
USE amparito_audiometriadb;

-- ============================================
-- TABLAS EXISTENTES (se mantienen)
-- ============================================

-- Tabla de usuarios
CREATE TABLE IF NOT EXISTS usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre_completo VARCHAR(100) NOT NULL,
    rut VARCHAR(12) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    especialidad VARCHAR(100),
    rol ENUM('admin', 'medico', 'fonoaudiologo', 'tecnico', 'centro', 'clinica', 'hospital') DEFAULT 'medico',
    activo BOOLEAN DEFAULT TRUE,
    fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de pacientes
CREATE TABLE IF NOT EXISTS pacientes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    run VARCHAR(12) UNIQUE NOT NULL,
    nombre_completo VARCHAR(100) NOT NULL,
    fecha_nacimiento DATE,
    telefono VARCHAR(20),
    direccion VARCHAR(200),
    sexo ENUM('M', 'F', 'OTRO'),
    fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de exámenes audiométricos
CREATE TABLE IF NOT EXISTS examenes_audiometricos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    paciente_id INT NOT NULL,
    usuario_id INT NOT NULL,
    fecha_examen DATE NOT NULL,
    tipo_tonal BOOLEAN DEFAULT TRUE,
    tipo_condicionamiento BOOLEAN DEFAULT FALSE,
    tipo_campo_libre BOOLEAN DEFAULT FALSE,
    observaciones TEXT,
    od_intensidad INT,
    od_masking INT,
    od_porcentaje INT,
    od_material VARCHAR(100),
    oi_intensidad INT,
    oi_masking INT,
    oi_porcentaje INT,
    oi_material VARCHAR(100),
    promedio_va_od DECIMAL(5,1),
    promedio_vo_od DECIMAL(5,1),
    promedio_va_oi DECIMAL(5,1),
    promedio_vo_oi DECIMAL(5,1),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (paciente_id) REFERENCES pacientes(id) ON DELETE CASCADE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

-- Tabla de umbrales audiométricos
CREATE TABLE IF NOT EXISTS umbrales_audiometricos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    examen_id INT NOT NULL,
    frecuencia INT NOT NULL,
    oido ENUM('od', 'oi') NOT NULL,
    via ENUM('aerea', 'osea') NOT NULL,
    nivel_db INT,
    FOREIGN KEY (examen_id) REFERENCES examenes_audiometricos(id) ON DELETE CASCADE,
    UNIQUE KEY unique_umbral (examen_id, frecuencia, oido, via)
);

-- ============================================
-- NUEVAS TABLAS PARA PLANES Y FACTURACIÓN
-- ============================================

-- Tabla de planes
CREATE TABLE IF NOT EXISTS planes (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50) NOT NULL,
    descripcion TEXT,
    tipo ENUM('por_informe', 'basico', 'avanzado', 'profesional', 'control') NOT NULL,
    precio_mensual DECIMAL(10,2) DEFAULT 0,
    limite_informes INT, -- NULL para ilimitado
    precio_informe_extra DECIMAL(10,2) DEFAULT 0,
    activo BOOLEAN DEFAULT TRUE
);

-- Insertar planes por defecto
INSERT INTO planes (nombre, descripcion, tipo, precio_mensual, limite_informes, precio_informe_extra) VALUES
('Precio por Informe', '1500 por informe generado', 'por_informe', 0, NULL, 1500),
('Plan Básico', '14990 mensuales, hasta 50 informes', 'basico', 14990, 50, 0),
('Plan Avanzado', '24990 mensuales, hasta 120 informes', 'avanzado', 24990, 120, 0),
('Plan Profesional', '49990 mensuales, informes ilimitados', 'profesional', 49990, NULL, 0),
('Plan Control', '9990 mensuales, 10 informes + 990 c/u extra', 'control', 9990, 10, 990)
ON DUPLICATE KEY UPDATE id=id;

-- Tabla de suscripciones de usuarios
CREATE TABLE IF NOT EXISTS suscripciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    plan_id INT NOT NULL,
    fecha_inicio DATE NOT NULL,
    fecha_fin DATE,
    estado ENUM('activo', 'cancelado', 'vencido', 'pendiente') DEFAULT 'activo',
    informes_usados INT DEFAULT 0,
    informes_periodo INT DEFAULT 0,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id) ON DELETE CASCADE,
    FOREIGN KEY (plan_id) REFERENCES planes(id)
);

-- Tabla de facturas
CREATE TABLE IF NOT EXISTS facturas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    suscripcion_id INT NOT NULL,
    numero_factura VARCHAR(50) UNIQUE NOT NULL,
    fecha_emision DATE NOT NULL,
    periodo_desde DATE NOT NULL,
    periodo_hasta DATE NOT NULL,
    monto_total DECIMAL(10,2) NOT NULL,
    informes_generados INT DEFAULT 0,
    informes_extra INT DEFAULT 0,
    monto_extra DECIMAL(10,2) DEFAULT 0,
    estado ENUM('pendiente', 'pagada', 'vencida') DEFAULT 'pendiente',
    fecha_pago DATE,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    FOREIGN KEY (suscripcion_id) REFERENCES suscripciones(id)
);

-- Tabla de logs de uso
CREATE TABLE IF NOT EXISTS logs_uso (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    examen_id INT NOT NULL,
    fecha DATETIME DEFAULT CURRENT_TIMESTAMP,
    tipo_accion ENUM('crear', 'ver', 'editar', 'exportar') DEFAULT 'crear',
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id),
    FOREIGN KEY (examen_id) REFERENCES examenes_audiometricos(id)
);

-- Tabla de notificaciones
CREATE TABLE IF NOT EXISTS notificaciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    usuario_id INT NOT NULL,
    titulo VARCHAR(200) NOT NULL,
    mensaje TEXT NOT NULL,
    leida BOOLEAN DEFAULT FALSE,
    fecha_creacion DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);

-- ============================================
-- USUARIO ADMIN POR DEFECTO (contraseña: admin123)
-- ============================================
INSERT INTO usuarios (nombre_completo, rut, email, password_hash, especialidad, rol, activo)
VALUES (
    'Administrador',
    '11111111-1',
    'admin@audiometria.cl',
    '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi',
    'Administrador',
    'admin',
    TRUE
) ON DUPLICATE KEY UPDATE id=id;

-- Asignar plan profesional (ilimitado) al admin
INSERT INTO suscripciones (usuario_id, plan_id, fecha_inicio, estado, informes_usados)
SELECT id, (SELECT id FROM planes WHERE tipo = 'profesional'), CURDATE(), 'activo', 0
FROM usuarios WHERE email = 'admin@audiometria.cl'
ON DUPLICATE KEY UPDATE id=id;