-- ====================================================
-- v21: 新增 settlement.modify 权限（确认结算）
-- 背景：FinanceController 的 triggerSettlement / confirmSettlement
--       将增加 @SaCheckPermission("settlement.modify") 注解，
--       需要先补齐权限数据，避免现有角色被 403 拦截。
--
-- 迁移策略：
--   1. 新增权限记录 settlement.modify（挂到财务分组 pid=64）
--   2. 自动授权给所有已拥有 settlement.list 的角色（保持现有功能不中断）
--   3. 超管角色（id=1）在 v9 中拥有全部权限，此处同样补上
-- ====================================================

DROP PROCEDURE IF EXISTS add_settlement_modify_permission;
DELIMITER //
CREATE PROCEDURE add_settlement_modify_permission()
BEGIN
    -- 1. 新增权限记录（幂等）
    IF NOT EXISTS (
        SELECT 1 FROM information_schema.TABLES
        WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 't_permission'
    ) THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 't_permission 表不存在，请先执行 init.sql';
    END IF;

    IF NOT EXISTS (
        SELECT 1 FROM t_permission WHERE value = 'settlement.modify'
    ) THEN
        INSERT INTO `t_permission` (`id`, `company_id`, `name`, `value`, `pid`, `weight`)
        VALUES (93, NULL, '确认结算', 'settlement.modify', 64, 7);
    END IF;

    -- 2. 授权给已拥有 settlement.list 的角色（管道分隔权限字符串，幂等）
    UPDATE `t_role`
    SET `permissions` = CONCAT(`permissions`, '|settlement.modify')
    WHERE FIND_IN_SET('settlement.list', REPLACE(IFNULL(`permissions`, ''), '|', ',')) > 0
      AND FIND_IN_SET('settlement.modify', REPLACE(IFNULL(`permissions`, ''), '|', ',')) = 0;

    -- 3. 超管角色兜底（若其权限字符串未包含新权限）
    UPDATE `t_role`
    SET `permissions` = CONCAT(IFNULL(`permissions`, ''), '|settlement.modify')
    WHERE `id` = 1
      AND FIND_IN_SET('settlement.modify', REPLACE(IFNULL(`permissions`, ''), '|', ',')) = 0;
END //
DELIMITER ;
CALL add_settlement_modify_permission();
DROP PROCEDURE IF EXISTS add_settlement_modify_permission;

-- ====================================================
-- 验证：
--   SELECT * FROM t_permission WHERE value = 'settlement.modify';
--   SELECT id, role_name, permissions FROM t_role WHERE permissions LIKE '%settlement.modify%';
-- ====================================================
