/**
 * 初始化角色菜单权限数据
 * @file init-role-menu-permissions.js
 * @description 为角色分配菜单权限
 */

const { Role, MenuPermission, RoleMenuPermission } = require('../models');

async function initRoleMenuPermissions() {
  try {
    console.log('开始初始化角色菜单权限数据...');

    // 获取所有角色
    const roles = await Role.findAll();
    console.log('找到角色:', roles.map(r => ({ id: r.id, name: r.name })));

    // 获取所有菜单权限
    const menus = await MenuPermission.findAll();
    console.log('找到菜单权限:', menus.map(m => ({ id: m.id, name: m.menu_name })));

    if (roles.length === 0 || menus.length === 0) {
      console.log('没有找到角色或菜单权限，跳过初始化');
      return;
    }

    // 清空现有关联数据
    await RoleMenuPermission.destroy({ where: {} });
    console.log('已清空现有角色菜单权限关联数据');

    // 为每个角色分配权限
    for (const role of roles) {
      let menuIds = [];

      if (role.name === 'admin') {
        // 管理员拥有所有权限
        menuIds = menus.map(m => m.id);
        console.log(`为管理员角色分配所有 ${menuIds.length} 个菜单权限`);
      } else if (role.name === 'manager') {
        // 经理拥有除系统管理外的所有权限
        menuIds = menus.filter(m => !m.menu_key.includes('system')).map(m => m.id);
        console.log(`为经理角色分配 ${menuIds.length} 个菜单权限`);
      } else if (role.name === 'operator') {
        // 操作员拥有基础权限
        const basicMenus = menus.filter(m => 
          m.menu_key.includes('dashboard') ||
          m.menu_key.includes('smart_device') ||
          m.menu_key.includes('smart_alert') ||
          m.menu_key.includes('animal.management') ||
          m.menu_key.includes('cattle.')
        );
        menuIds = basicMenus.map(m => m.id);
        console.log(`为操作员角色分配 ${menuIds.length} 个菜单权限`);
      }

      // 创建角色菜单权限关联
      if (menuIds.length > 0) {
        const roleMenuPermissions = menuIds.map(menuId => ({
          role_id: role.id,
          menu_permission_id: menuId
        }));

        await RoleMenuPermission.bulkCreate(roleMenuPermissions);
        console.log(`已为角色 ${role.name} 创建 ${roleMenuPermissions.length} 个权限关联`);
      }
    }

    console.log('角色菜单权限数据初始化完成！');

    // 验证结果
    const totalAssociations = await RoleMenuPermission.count();
    console.log(`总共创建了 ${totalAssociations} 个角色菜单权限关联`);

    // 显示每个角色的权限数量
    for (const role of roles) {
      const count = await RoleMenuPermission.count({ where: { role_id: role.id } });
      console.log(`角色 ${role.name} 拥有 ${count} 个菜单权限`);
    }

  } catch (error) {
    console.error('初始化角色菜单权限数据失败:', error);
  } finally {
    process.exit(0);
  }
}

// 运行脚本
initRoleMenuPermissions();
