import { BasicPageParams, BasicFetchResult } from '/@/api/model/baseModel';

export type AccountParams = BasicPageParams & {
  account?: string;
  nickname?: string;
};

export type RoleParams = {
  roleType?: string;
  roleName?: string;
  status?: string;
};

export type RolePageParams = BasicPageParams & RoleParams;

export type DeptParams = {
  deptName?: string;
  status?: string;
};

export type MenuParams = {
  menuName?: string;
  status?: string;
};

export interface AccountListItem {
  id: string;
  username: string;
  password: string;
  email: string;
  realName: string;
  roles: any;
  groupIds: any;
  createTime: string;
  deptId: string;
  accountExpireTime?: string;
}

export interface OrganizationListItem {
  id: string;
  name: string;
  parentId?: string;
  remark: string;
}

export interface MenuListItem {
  id: string;
  orderNo: string;
  createTime: string;
  status: number;
  icon: string;
  component: string;
  permission: string;
}

export interface RoleListItem {
  id: string;
  name: string;
  status: number;
  createTime: string;
  roleType: string;
}

export interface RoleReqDTO {
  id?: string;
  name?: string;
  remark?: string;
  status: number;
  menu: Array<string>;
}

export interface ChangeAccountParams {
  userId?: string;
  password?: string;
  resetPassword?: string;
}

export class RoleOrOrganizationParam {
  userId: string;
  queryRole: boolean;
  queryOrganization: boolean;
  constructor(userId: string, queryRole: boolean, queryOrganization: boolean) {
    this.queryRole = queryRole;
    this.queryOrganization = queryOrganization;
    this.userId = userId;
  }
}

/**
 * @description: Request list return value
 */
export type AccountListGetResultModel = BasicFetchResult<AccountListItem>;

export type OrganizationListGetResultModel = BasicFetchResult<OrganizationListItem>;

export type MenuListGetResultModel = BasicFetchResult<MenuListItem>;

export type RolePageListGetResultModel = BasicFetchResult<RoleListItem>;

export type RoleListGetResultModel = RoleListItem[];

export type AccountListModel = AccountListItem;
