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

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

//选择类型
export type TChooseType = "checkbox" | "radio";

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

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

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

//部门id和部门的映射
export type TDepartmentMap = Record<"string", TDepartmentData>;

/**
 * 员工信息
 * @param  id - id
 * @param  key - 用于v-for用的key
 * @param  name - 用户名
 * @param  avatar - 员工头像
 * @param  status - 员工状态 1-正常 5-离职
 * @param  initial - 姓名首字母
 * @param  accountStatus - 账号状态 0-禁用 1-正常
 * @param  renderType - 渲染类型
 * @param  departmentIds - 员工所属部门
 */
export type TEmployeeData = {
  id: string;
  key: string;
  name: string;
  avatar: string;
  status: number;
  initial: string;
  accountStatus: number;
  renderType: TRenderType;
  departmentIds: 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  parentIds - 所有父集的id集合
 * @param  childrenIds - 所有子集的id集合
 */
export type TDepartmentData = Pick<
  TEmployeeData,
  "id" | "key" | "name" | "renderType"
> & {
  count: number;
  children: TDepartmentData[];
  parentIds: string[];
  childrenIds: string[];
};

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

/**
 * 组织架构
 * @param  avatar - 组织架构图片
 * @param  id - id
 * @param  name - 领导名或者是组织名称
 * @param  type - 数据类型 1-部门 2-员工
 * @param  departmentId - 所属部门id
 * @param  count - 该部门下人数
 * @param  status - 员工状态 1-正常 5-离职
 */
export type TEmployeeDeptData = {
  avatar: string;
  name: string;
  id: string;
  type: number;
  departmentId: string;
  count: number;
  status: 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  renderType 渲染类型
 * @param  checkedIds 当前选中员工的id集合
 * @param  checkedList 当前选中员工的列表集合
 * @param  currentItem 当前操作的栏
 */
export type TChangeRadioStatusParams = {
  renderType: TListRenderType;
  checkedIds: string[];
  checkedList: TEmployeeData[];
  currentItem: TRenderData;
};

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

//useChangeRadioStatus的hooks的函数类型
export type TChangeRadioStatusFn = (
  params: TChangeRadioStatusParams,
) => TChangeRadioStatusReturn;
