-- 添加权限管理功能的数据迁移脚本
-- 执行前请确保已备份数据库

-- 1. 添加权限管理相关权限（如果不存在）
IF NOT EXISTS (SELECT 1 FROM permissions WHERE Code = 'permission:list')
BEGIN
    INSERT INTO permissions (Name, Code, Module, Description, CreatedAt)
    VALUES 
        (N'权限列表', 'permission:list', N'权限管理', N'查看权限列表', GETDATE()),
        (N'权限详情', 'permission:detail', N'权限管理', N'查看权限详情', GETDATE()),
        (N'创建权限', 'permission:create', N'权限管理', N'创建新权限', GETDATE()),
        (N'更新权限', 'permission:update', N'权限管理', N'更新权限信息', GETDATE()),
        (N'删除权限', 'permission:delete', N'权限管理', N'删除权限', GETDATE());
    
    PRINT N'权限管理权限已添加';
END
ELSE
BEGIN
    PRINT N'权限管理权限已存在，跳过';
END

-- 2. 获取系统管理菜单ID
DECLARE @systemMenuId BIGINT;
SELECT @systemMenuId = Id FROM menus WHERE Path = '/system' AND MenuType = 1;

-- 3. 添加权限管理菜单（如果不存在）
IF @systemMenuId IS NOT NULL AND NOT EXISTS (SELECT 1 FROM menus WHERE Path = '/system/permission')
BEGIN
    INSERT INTO menus (ParentId, Name, Path, Component, Icon, MenuType, Permission, SortOrder, Status, IsExternal, IsCache, CreatedAt)
    VALUES (@systemMenuId, N'权限管理', '/system/permission', 'system/permission/index', 'Key', 2, 'permission:list', 3, 1, 0, 1, GETDATE());
    
    PRINT N'权限管理菜单已添加';
    
    -- 更新其他菜单的排序
    UPDATE menus SET SortOrder = 4 WHERE Path = '/system/department';
    UPDATE menus SET SortOrder = 5 WHERE Path = '/system/user';
    UPDATE menus SET SortOrder = 6 WHERE Path = '/system/log';
END
ELSE
BEGIN
    PRINT N'权限管理菜单已存在或系统管理目录不存在，跳过';
END

-- 4. 为超级管理员角色分配新权限
DECLARE @superAdminRoleId BIGINT;
SELECT @superAdminRoleId = Id FROM roles WHERE Code = 'super_admin';

IF @superAdminRoleId IS NOT NULL
BEGIN
    -- 添加权限关联（如果不存在）
    INSERT INTO role_permissions (RoleId, PermissionId)
    SELECT @superAdminRoleId, p.Id
    FROM permissions p
    WHERE p.Module = N'权限管理'
    AND NOT EXISTS (
        SELECT 1 FROM role_permissions rp 
        WHERE rp.RoleId = @superAdminRoleId AND rp.PermissionId = p.Id
    );
    
    PRINT N'超级管理员权限已更新';
    
    -- 添加菜单关联（如果不存在）
    DECLARE @permissionMenuId BIGINT;
    SELECT @permissionMenuId = Id FROM menus WHERE Path = '/system/permission';
    
    IF @permissionMenuId IS NOT NULL AND NOT EXISTS (
        SELECT 1 FROM role_menus WHERE RoleId = @superAdminRoleId AND MenuId = @permissionMenuId
    )
    BEGIN
        INSERT INTO role_menus (RoleId, MenuId)
        VALUES (@superAdminRoleId, @permissionMenuId);
        
        PRINT N'超级管理员菜单已更新';
    END
END

PRINT N'权限管理功能数据迁移完成';
