//渲染类型
export enum ERenderType {
  "department" = 1,
  "employee" = 2,
}

//列表渲染item有三种类型，首字母/员工/部门
export type TRenderType = "initial" | "employee" | "department";

//列表页面要渲染两种类型三种类型，员工/部门
export type TListRenderType = Exclude<TRenderType, "initial">;

//点击一栏的位置
export type TPositionType = "radio" | "title" | "arrow";

//图标类型
export type TChangeRadioStatusType = "hook" | "icon";

//选中状态
export type TCheckedStatus = "no-check" | "pre-check" | "checked";

//接口返回的原始数据
export type TOriginData = any;

/**
 * 员工信息
 * @param  id - id
 * @param  key - 用于v-for用的key
 * @param  name - 用户名
 * @param  avatar - 员工头像
 * @param  initial - 姓名首字母
 * @param  isQuit - 是否离职
 * @param  isForbidden - 是否禁用
 * @param  renderType - 渲染类型
 * @param  parentId - 父级部门id
 * @param  parentIds - 父级部门的id的list
 * @param  userid_third - 三方用户id（不驼峰的话项目改动太大）
 */
export type TEmployeeData = {
  id: string;
  key: string;
  name: string;
  avatar: string;
  initial: string;
  isQuit: boolean;
  isForbidden: boolean;
  renderType: TRenderType;
  parentId: string;
  parentIds: string[];
  userid_third: string;
};

/**
 * 字母标题的信息
 * @param  id - id
 * @param  key - 用于v-for用的key
 * @param  initial - 姓名首字母
 * @param  renderType - 渲染类型
 */
export type TLetterData = Pick<TEmployeeData, "id" | "key" | "initial" | "renderType">;

/**
 * 字母标题的信息
 * @param  id - id
 * @param  key - 用于v-for用的key
 * @param  initial - 姓名首字母
 * @param  renderType - 渲染类型
 * @param  count - 当前部门有多少员工
 * @param  children - 下一级子集集合
 * @param  childrenIds - 所有子集的id集合
 * @param  parentIds - 所有上级部门的id集合
 */
export type TDepartmentData = Pick<
  TEmployeeData,
  "id" | "key" | "name" | "renderType" | "parentIds" | "parentId"
> & {
  count: number;
  children: TDepartmentData[];
  childrenIds: string[];
};

/**
 * useChangeRadioStatus的hooks的返回值
 * @param  type wlradio的type
 * @param  icon 图标类型
 * @param  checkedStatus 选中状态 半选/全选/未选
 * @param  isChoosed 是否选中
 */
export type TChangeRadioStatusReturn = {
  icon?: string;
  checkedStatus?: TCheckedStatus;
  type?: TChangeRadioStatusType;
  isChoosed?: boolean;
};

//员工列表带选择状态
export type TEmployeeDataAddStatus = TEmployeeData & TChangeRadioStatusReturn;

//部门列表带选择状态
export type TDepartmentDataAddStatus = TDepartmentData & TChangeRadioStatusReturn;

//用于列表渲染的排除英文字母的数据
export type TRenderDataNoLetter = TEmployeeDataAddStatus | TDepartmentDataAddStatus;

//用于列表渲染的数据
export type TRenderData = TEmployeeDataAddStatus | TLetterData | TDepartmentDataAddStatus;

/**
 * 组织架构
 * @param  avatar - 组织架构图片
 * @param  id - id
 * @param  alias - 名称别名
 * @param  name - 领导名或者是组织名称
 * @param  type - 数据类型 1-部门 2-员工
 * @param  departmentId - 所属部门id
 * @param  count - 该部门下人数
 */
export type TEmployeeDeptData = {
  avatar: string;
  alias: string;
  name: string;
  id: string;
  type: number;
  departmentId: string;
  count: number;
};

/**
 * 附件文件参数
 * @param  child_tenant_id -
 * @param  corp_id - 企业id
 * @param  corp_logo - 企业log
 * @param  corp_name - 企业名称
 */
export type TEmployeeCorpData = {
  child_tenant_id: string;
  corp_id: string;
  corp_logo: string;
  corp_name: string;
};

/**
 * 附件文件参数
 * @param  id 1的话表示上下游，2的话表示组织架构
 * @param  icon
 * @param  name
 */
export type TFrameWorkData = {
  id: "1" | "2";
  icon: string;
  name: string;
};

/**
 * useChangeRadioStatus的hooks的参数
 * @param  checkedIds 当前选中员工的id集合
 * @param  checkedList 当前选中员工的列表集合
 * @param  currentItem 当前操作的栏
 */
export type TChangeRadioStatusParams = {
  checkedIds: string[];
  checkedList: TEmployeeData[];
  currentItem: TRenderData;
};

/**
 * 获取dept接口的参数
 * @param  isLeader 是否是leader
 * @param  parentDeptId 父级部门id
 * @param  isOnlySub 是否只获取下一级员工还是当前部门下所有员工
 * @param  needNoDeptEmployee 是否需要无部门员工
 */
export type TGetDeptParams = {
  isLeader: boolean;
  isOnlySub: boolean;
  parentDeptId: string;
  needNoDeptEmployee: boolean;
};
