-- Hotfix: responsable operativo por linea de pedido
-- Objetivo:
-- 1) mantener tm_detalle_pedido.id_usu como usuario que opero el sistema
-- 2) registrar tm_detalle_pedido.id_responsable como mozo/cajero responsable de la linea

SET @col_exists := (
    SELECT COUNT(*)
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'tm_detalle_pedido'
      AND COLUMN_NAME = 'id_responsable'
);

SET @sql_add_col := IF(
    @col_exists = 0,
    'ALTER TABLE tm_detalle_pedido ADD COLUMN id_responsable INT(11) NULL AFTER id_usu',
    'SELECT 1'
);
PREPARE stmt_add_col FROM @sql_add_col;
EXECUTE stmt_add_col;
DEALLOCATE PREPARE stmt_add_col;

SET @idx_exists := (
    SELECT COUNT(*)
    FROM information_schema.STATISTICS
    WHERE TABLE_SCHEMA = DATABASE()
      AND TABLE_NAME = 'tm_detalle_pedido'
      AND INDEX_NAME = 'IDX_DPED_RESP'
);

SET @sql_add_idx := IF(
    @idx_exists = 0,
    'ALTER TABLE tm_detalle_pedido ADD KEY IDX_DPED_RESP (id_responsable)',
    'SELECT 1'
);
PREPARE stmt_add_idx FROM @sql_add_idx;
EXECUTE stmt_add_idx;
DEALLOCATE PREPARE stmt_add_idx;

-- Backfill inicial:
-- Mesa        -> responsable del pedido de mesa (id_mozo)
-- Para llevar -> usuario del pedido
-- Delivery    -> usuario del pedido
UPDATE tm_detalle_pedido dp
INNER JOIN tm_pedido tp
    ON tp.id_pedido = dp.id_pedido
LEFT JOIN tm_pedido_mesa pm
    ON pm.id_pedido = dp.id_pedido
SET dp.id_responsable = CASE
    WHEN tp.id_tipo_pedido = 1 THEN pm.id_mozo
    ELSE tp.id_usu
END
WHERE dp.id_responsable IS NULL;
