import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { MenuForm, MenuQuery, MenuSortRequest, MenuSortVO, MenuTreeOption, MenuVO, RoleMenuTree } from './types';

// 查询菜单列表
export const listMenu = (query?: MenuQuery): AxiosPromise<MenuVO[]> => {
  return request({
    url: '/system/menu/list',
    method: 'get',
    params: query
  });
};

/**
 * 菜单管理使用
 * 系统管理员可以看到所有菜单
 * @param query
 */
export const listMenuManage = (query?: MenuQuery): AxiosPromise<MenuVO[]> => {
  return request({
    url: '/system/menu/menuManageList',
    method: 'get',
    params: query
  });
};

// 查询菜单排序树
export const getSortTree = (): AxiosPromise<MenuSortVO[]> => {
  return request({
    url: '/system/menu/sortTree',
    method: 'get'
  });
};

// 菜单排序
export const sortMenu = (data: MenuSortRequest[]): AxiosPromise<any> => {
  return request({
    url: '/system/menu/sort',
    method: 'post',
    data: data
  });
};

// 查询菜单详细
export const getMenu = (menuId: string | number): AxiosPromise<MenuVO> => {
  return request({
    url: '/system/menu/' + menuId,
    method: 'get'
  });
};

// 查询菜单下拉树结构
export const treeselect = (): AxiosPromise<MenuTreeOption[]> => {
  return request({
    url: '/system/menu/treeselect',
    method: 'get'
  });
};

// 根据角色类型查询菜单下拉树结构
export const treeselectByRoleCategory = (roleCategory: string): AxiosPromise<MenuTreeOption[]> => {
  return request({
    url: '/system/menu/treeselectByRoleCategory/' + roleCategory,
    method: 'get'
  });
};

// 根据角色ID查询菜单下拉树结构
export const roleMenuTreeselect = (roleId: string | number): AxiosPromise<RoleMenuTree> => {
  return request({
    url: '/system/menu/roleMenuTreeselect/' + roleId,
    method: 'get'
  });
};

// 根据角色类型和角色ID查询菜单下拉树结构
export const roleMenuTreeselectByCategory = (roleId: string | number, roleCategory: string): AxiosPromise<RoleMenuTree> => {
  return request({
    url: '/system/menu/roleMenuTreeselectByCategory/' + roleId + '/' + roleCategory,
    method: 'get'
  });
};

// 根据角色ID查询菜单下拉树结构
export const tenantPackageMenuTreeselect = (packageId: string | number): AxiosPromise<RoleMenuTree> => {
  return request({
    url: '/system/menu/tenantPackageMenuTreeselect/' + packageId,
    method: 'get'
  });
};

// 新增菜单
export const addMenu = (data: MenuForm) => {
  return request({
    url: '/system/menu/add',
    method: 'post',
    data: data
  });
};

// 修改菜单
export const updateMenu = (data: MenuForm) => {
  return request({
    url: '/system/menu/edit',
    method: 'post',
    data: data
  });
};

// 删除菜单
export const delMenu = (menuId: string | number) => {
  return request({
    url: '/system/menu/remove/' + menuId,
    method: 'post'
  });
};

// 级联删除菜单
export const cascadeDelMenu = (menuIds: Array<string | number>) => {
  return request({
    url: '/system/menu/cascade/' + menuIds,
    method: 'post'
  });
};

// 重置菜单路径链
export const resetMenuPath = () => {
  return request({
    url: '/system/menu/resetMenuPath',
    method: 'post'
  });
};

// 导出菜单列表
export const exportMenu = (query?: MenuQuery) => {
  return request({
    url: '/system/menu/export',
    method: 'post',
    params: query,
    responseType: 'blob'
  });
};
