import http from '@/api'

import {
  ReqMenuPage,
  ResMenu,
  ReqMenuEdit,
  ResAllMenuGroup,
  ResMenuTree,
  ReqDataRange,
  ResDataRange
} from '@/api/interface/menu/index'

const api = {
  getMenuList: '/platform/menu/list', // 菜单管理列表
  postMenuEnable: '/platform/menu/enable', // 启用菜单
  postMenuEdit: '/platform/menu/edit', // 编辑菜单
  postMenuDisable: '/platform/menu/disable', // 停用菜单
  getAllMenuGroup: '/platform/menu/getAllMenuGroup', // 获取所有菜单组集合
  getOperations: '/platform/menu/operations', // 查询菜单操作日志
  postMenuRemove: '/platform/menu/remove', // 删除菜单
  postMenuSave: '/platform/menu/save', // 添加菜单
  postMenuSort: '/platform/menu/sort', // 菜单排序
  getMenuTree: '/platform/menu/tree', // 菜单树
  getDiffLevelMenu: '/platform/menu/getDiffLevelMenu', // 获取不同层级菜单集合
  postSaveMenu: '/platform/permission/saveMenu', //  保存角色菜单权限
  postSaveDataRange: '/platform/permission/saveDataRange', // 保存数据权限
  getDataRange: '/platform/permission/dataRange', // 查询角色的数据权限
  postDataRangeClone: '/platform/permission/dataRange/clone', // 应用数据权限至其他菜单

  postSaveUserClient: '/platform/version/saveUserClient' // 保存用户客户端版本
}

/**
 * @description 菜单管理列表
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33171
 * @param page 页码  [必填]
 * @param limit 每页数量（默认为10）
 * @param condMenuName 模糊搜索-菜单名称
 * @param menuLevel 筛选-菜单层级
 * @param topMenuId 筛选-菜单组编号
 * @param status 筛选-菜单状态【0：编辑中 1：启用；2：停用】
 * @param tabType 菜单类型【0：平台； 1:机构】  [必填]
 */
export const getMenuList = (params: ReqMenuPage) => {
  return http.get<ResMenu[]>(api.getMenuList, params)
}

/**
 * @description 启用菜单
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33170
 * @param menuId undefined
 */
export const postMenuEnable = (data: { menuId: string }) => {
  return http.post(api.postMenuEnable, data, { noLoading: true })
}

/**
 * @description 编辑菜单
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33169
 * @param htmlPlatform 前端服务平台
 * @param icon icon [必填]
 * @param menuId 菜单编号（更新菜单时必须）
 * @param menuLevel 菜单层级 [必填]
 * @param menuName 菜单名称 [必填]
 * @param menuSign 菜单标识 [必填]
 * @param isButton 菜单类型: 是否为按钮 [必填]
 * @param menu_path 菜单路径 [必填]
 * @param parentId 父级菜单编号
 * @param router 路由名称 [必填]
 */
export const postMenuEdit = (data: ReqMenuEdit) => {
  return http.post(api.postMenuEdit, data, { noLoading: true })
}

/**
 * @description 停用菜单
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33210
 * @param menuId undefined
 */
export const postMenuDisable = (data: { menuId: string }) => {
  return http.post(api.postMenuDisable, data, { noLoading: true })
}

/**
 * @description 获取所有菜单组集合
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33213
 * @param tabType undefined
 */
export const getAllMenuGroup = (params: { tabType: number }) => {
  return http.get<ResAllMenuGroup[]>(api.getAllMenuGroup, params, { noLoading: true })
}

/**
 * @description 查询菜单操作日志
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33215
 * @param page 页码  [必填]
 * @param limit 每页数量（默认为10）
 * @param condInputUserName 模糊搜索-操作人姓名
 */
export const getOperations = (params: ReqMenuPage) => {
  return http.get<ResMenu[]>(api.getOperations, params)
}

/**
 * @description 删除菜单
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33216
 * @param menuId undefined
 */
export const postMenuRemove = (data: { menuId: string }) => {
  return http.post(api.postMenuRemove, data, { noLoading: true })
}

/**
 * @description 添加菜单
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33217
 * @param htmlPlatform 前端服务平台
 * @param icon icon [必填]
 * @param isButton 是否为按钮 [必填]
 * @param menuId 菜单编号（更新菜单时必须）
 * @param menuLevel 菜单层级 [必填]
 * @param menuName 菜单名称 [必填]
 * @param menuSign 菜单标识 [必填]
 * @param menu_path 菜单路径 [必填]
 * @param parentId 父级菜单编号
 * @param router 路由名称 [必填]
 */
export const postMenuSave = (data: ReqMenuEdit) => {
  return http.post(api.postMenuSave, data, { noLoading: true })
}

/**
 * @description 菜单排序
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33218
 * @param menuId undefined
 * @param newSortNum 该菜单排序后的排序号 [必填]
 */
export const postMenuSort = (data: { menuId?: string; newSortNum: number }[]) => {
  return http.post(api.postMenuSort, data)
}

/**
 * @description 菜单树
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33219
 * @param condMenuName 模糊搜索-菜单名称
 * @param roleId 筛选-角色编号对应权限选中标识
 * @param maxMenuLevel 筛选-最大菜单层级
 */
export const getMenuTree = (params: { condMenuName?: string; roleId?: string; maxMenuLevel?: number }) => {
  return http.get<ResMenuTree[]>(api.getMenuTree, params)
}

/**
 * @description 获取不同层级菜单集合
 * @author 邹琪涛
 * @docs http://api.seevin.com/project/669/interface/api/33227
 * @param tabType   [必填]
 * @param menuLevel 菜单层级，1:一级菜单，2:二级菜单，3:按钮  [必填]
 */
export const getDiffLevelMenu = (params: { tabType: number; menuLevel: number }) => {
  return http.get<ResMenu[]>(api.getDiffLevelMenu, params, { noLoading: true })
}

/**
 * @description  保存角色菜单权限
 * @author 汪洋
 * @docs http://api.seevin.com/project/669/interface/api/33187
 * @param menus 菜单树 [必填]
 * @param roleId 角色编号 [必填]
 */
export const postSaveMenu = (data: { menus: ResMenuTree[]; roleId: string }) => {
  return http.post(api.postSaveMenu, data)
}

/**
 * @description 保存数据权限
 * @author 汪洋
 * @docs http://api.seevin.com/project/669/interface/api/33186
 * @param dataRange undefined [必填]
 * @param menuId 菜单编号 [必填]
 * @param roleId 角色编号 [必填]
 */
export const postSaveDataRange = (data: ReqDataRange) => {
  return http.post(api.postSaveDataRange, data)
}

/**
 * @description 查询角色的数据权限
 * @author 汪洋
 * @docs http://api.seevin.com/project/669/interface/api/33353
 * @param roleId roleId  [必填]
 * @param menuId menuId  [必填]
 */
export const getDataRange = (params: { roleId: string; menuId: string }) => {
  return http.get<ResDataRange>(api.getDataRange, params)
}

/**
 * @description 应用数据权限至其他菜单
 * @author 汪洋
 * @docs http://api.seevin.com/project/669/interface/api/33184
 * @param roleId 角色编号 [必填]
 * @param sourceMenuId 源菜单编号 [必填]
 * @param targetMenuId 目标菜单编号 [必填]
 */
export const postDataRangeClone = (data: { roleId: string; sourceMenuId: string; targetMenuId: string[] }) => {
  return http.post(api.postDataRangeClone, data)
}

/**
 * @description 保存用户客户端版本
 * @author 汪洋
 * @docs http://api.seevin.com/project/669/interface/api/33363
 * @param versionId 客户端版本号
 */
export const postSaveUserClient = (data: { versionId: string }) => {
  return http.post(api.postSaveUserClient, data)
}
