-- ============================================================
--  Migración 01 · Integridad referencial de columnas de usuario
--  Fecha: 2026-08-28
-- ------------------------------------------------------------
--  Añade FK hacia usuarios(id_usuario) en las columnas de
--  auditoría / actor que hoy no la tienen. Todas son nullable
--  y no forman parte del negocio -> ON DELETE SET NULL.
--
--  Verificado antes de aplicar: 0 filas huérfanas.
--  Las tablas orden_salida / orden_traslado se tratan en la
--  migración 04 (junto con la normalización de su `estado`).
-- ============================================================
USE tinsa_db;

-- usuario_modifico -------------------------------------------------
ALTER TABLE bodega
  ADD CONSTRAINT fk_bodega_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE catalogo_producto
  ADD CONSTRAINT fk_catalogo_producto_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE categoria
  ADD CONSTRAINT fk_categoria_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE cliente
  ADD CONSTRAINT fk_cliente_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE configuracion_sistema
  ADD CONSTRAINT fk_configuracion_sistema_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE cotizacion_venta
  ADD CONSTRAINT fk_cotizacion_venta_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE marca
  ADD CONSTRAINT fk_marca_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE medida
  ADD CONSTRAINT fk_medida_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE proveedor
  ADD CONSTRAINT fk_proveedor_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE subcategoria
  ADD CONSTRAINT fk_subcategoria_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE sucursal
  ADD CONSTRAINT fk_sucursal_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE tipo_bodega
  ADD CONSTRAINT fk_tipo_bodega_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE ubicacion_bodega
  ADD CONSTRAINT fk_ubicacion_bodega_usuario_modifico
  FOREIGN KEY (usuario_modifico) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

-- actores de cotización de venta ---------------------------------
-- id_usuario_vendedor es NOT NULL -> RESTRICT (igual que los actores
-- de solicitud_compra). El borrado de usuarios es lógico (activo=0).
ALTER TABLE cotizacion_venta
  ADD CONSTRAINT fk_cotizacion_venta_usuario_vendedor
  FOREIGN KEY (id_usuario_vendedor) REFERENCES usuarios(id_usuario)
  ON DELETE RESTRICT ON UPDATE CASCADE;

ALTER TABLE cotizacion_venta
  ADD CONSTRAINT fk_cotizacion_venta_usuario_cotizador
  FOREIGN KEY (id_usuario_cotizador) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;

-- movimiento de stock -------------------------------------------
ALTER TABLE movimiento_stock
  ADD CONSTRAINT fk_movimiento_stock_usuario
  FOREIGN KEY (id_usuario) REFERENCES usuarios(id_usuario)
  ON DELETE SET NULL ON UPDATE CASCADE;
