-- migracion_030_fix_trigger_usuarios.sql
--
-- ARREGLA: "SQLSTATE[HY000]: General error: 1442 Can't update table 'usuarios'
--           in stored function/trigger because it is already used by statement
--           which invoked this stored function/trigger"
--
-- CAUSA
-- El trigger `trigger_nuevo_usuario_mesa_inicial` (creado en
-- 026_mesas_dinamicas.sql) es AFTER INSERT ON usuarios y adentro hacía:
--
--     UPDATE usuarios SET mesa_actual_id = 1 WHERE id = NEW.id;
--
-- MySQL PROHÍBE que un trigger modifique la MISMA tabla que lo disparó. Por
-- eso fallaba TODA creación de usuario: invitado, registro por email, Google
-- y Facebook. Ese era el motivo real del "no se puede entrar como invitado".
--
-- SOLUCIÓN
-- Ese UPDATE era redundante: la columna ya se creó como
--     ALTER TABLE usuarios ADD COLUMN mesa_actual_id INT DEFAULT 1;
-- así que el usuario YA nace con mesa_actual_id = 1 sin necesidad de
-- actualizarlo. Se recrea el trigger conservando solo el INSERT en
-- usuario_mesas_compradas (que sí es sobre otra tabla y es legal).
--
-- Se agrega además IGNORE para que, si por lo que sea la fila ya existiera,
-- el trigger no aborte la creación del usuario.

DROP TRIGGER IF EXISTS trigger_nuevo_usuario_mesa_inicial;

DELIMITER //
CREATE TRIGGER trigger_nuevo_usuario_mesa_inicial
AFTER INSERT ON usuarios
FOR EACH ROW
BEGIN
  -- Registrar que el usuario "compró" (gratis) la mesa inicial azul.
  -- (El UPDATE sobre `usuarios` se eliminó a propósito: es ilegal en un
  --  trigger de la propia tabla y era innecesario, porque mesa_actual_id
  --  ya tiene DEFAULT 1.)
  INSERT IGNORE INTO usuario_mesas_compradas (usuario_id, mesa_id)
  VALUES (NEW.id, 1);
END //
DELIMITER ;

-- Asegurar el valor por defecto de la columna (por si alguna instalación
-- vieja quedó sin el DEFAULT).
ALTER TABLE usuarios MODIFY COLUMN mesa_actual_id INT UNSIGNED DEFAULT 1;

-- Backfill: usuarios ya existentes que hubieran quedado sin mesa asignada.
UPDATE usuarios SET mesa_actual_id = 1 WHERE mesa_actual_id IS NULL;
