-- BI UBE v3.1 - DOCENTE + DASHBOARD DOCENTE + DESIGNACIÓN COMO TUTOR
-- Ejecutar UNA SOLA VEZ.
-- Conserva el rol Tutor por compatibilidad con cuentas antiguas.

SET NAMES utf8mb4;

-- Agrega el rol Docente sin eliminar los roles existentes.
ALTER TABLE usuarios
MODIFY COLUMN rol ENUM('Administrador','Director','Consulta','Coordinador','Tutor','Docente') NOT NULL DEFAULT 'Consulta';

-- Vincula cada cuenta Docente con el registro institucional de docentes.
SET @c=(SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
       WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='usuarios' AND COLUMN_NAME='docente_id');
SET @s=IF(@c=0,
 'ALTER TABLE usuarios ADD COLUMN docente_id INT NULL AFTER programa_id',
 'SELECT 1');
PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st;

SET @ix=(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
        WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='usuarios' AND INDEX_NAME='idx_usuarios_docente');
SET @sx=IF(@ix=0,
 'CREATE INDEX idx_usuarios_docente ON usuarios(docente_id)',
 'SELECT 1');
PREPARE st FROM @sx; EXECUTE st; DEALLOCATE PREPARE st;

-- Vincula automáticamente cuentas Tutor históricas con un docente cuando existe coincidencia inequívoca
-- por programa y nombre. No cambia su rol; únicamente completa docente_id.
UPDATE usuarios u
JOIN docentes d ON UPPER(TRIM(d.nombres))=UPPER(TRIM(u.nombres))
JOIN docentes_programas dp ON dp.docente_id=d.id AND dp.programa_id=u.programa_id AND dp.estado='ACTIVO'
SET u.docente_id=d.id
WHERE u.rol='Tutor' AND u.docente_id IS NULL;

-- Nombres oficiales de programas.
UPDATE programas_estudio SET codigo='APSTI',
nombre='Arquitectura de Plataformas y Servicios de Tecnologías de Información'
WHERE codigo='APSTI' OR nombre='APSTI'
   OR nombre='Administración de Sistemas de Información'
   OR nombre='Administracion de Sistemas de Informacion'
   OR nombre LIKE 'Arquitectura de Plataformas%';

UPDATE programas_estudio SET nombre='Enfermería Técnica'
WHERE nombre IN ('Enfermeria Tecnica','Enfermería Técnica');
UPDATE programas_estudio SET nombre='Contabilidad'
WHERE nombre='Contabilidad';
UPDATE programas_estudio SET nombre='Producción Agropecuaria'
WHERE nombre IN ('Produccion Agropecuaria','Producción Agropecuaria');
