-- Usuarios para personal administrativo sin vínculo docente.

ALTER TABLE usuario_sistema
  ADD COLUMN IF NOT EXISTS id_persona INT UNSIGNED NULL AFTER id_docente;

SET @idx_usuario_persona_exists := (
  SELECT COUNT(*)
  FROM information_schema.STATISTICS
  WHERE TABLE_SCHEMA = DATABASE()
    AND TABLE_NAME = 'usuario_sistema'
    AND INDEX_NAME = 'idx_usuario_persona'
);
SET @sql := IF(@idx_usuario_persona_exists = 0,
  'ALTER TABLE usuario_sistema ADD INDEX idx_usuario_persona (id_persona)',
  'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @fk_usuario_persona_exists := (
  SELECT COUNT(*)
  FROM information_schema.TABLE_CONSTRAINTS
  WHERE CONSTRAINT_SCHEMA = DATABASE()
    AND TABLE_NAME = 'usuario_sistema'
    AND CONSTRAINT_NAME = 'fk_usuario_persona'
);
SET @sql := IF(@fk_usuario_persona_exists = 0,
  'ALTER TABLE usuario_sistema ADD CONSTRAINT fk_usuario_persona FOREIGN KEY (id_persona) REFERENCES persona(id_persona)',
  'SELECT 1'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

UPDATE usuario_sistema u
INNER JOIN docente d ON d.id_docente = u.id_docente
SET u.id_persona = d.id_persona
WHERE u.id_persona IS NULL;

