import type { PageParam, PageResult } from '#/packages/effects/request/src';

import { requestClient } from '#/api/request';

export namespace HrmEmployeeContractApi {
  /** 员工合同 */
  export interface EmployeeContract {
    id?: number;
    /** 续签上一份合同ID */
    parentId?: number;
    /** 续签上一份合同编号 */
    parentNo?: string;
    /** 是否当前生效合同 */
    isCurrent?: boolean;
    /** 合同编号（后端自动生成） */
    contractNo?: string;
    /** 员工ID */
    employeeId?: number;
    /** 员工姓名 */
    employeeName?: string;
    /** 员工工号 */
    employeeNo?: string;
    /** 部门名称 */
    deptName?: string;
    /** 合同类型：1-劳动合同 2-劳务合同 3-实习协议 4-劳务派遣 5-其他 */
    contractType?: number;
    /** 合同期限类型：1-固定期限 2-无固定期限 3-以完成一定工作任务为期限 */
    contractTermType?: number;
    /** 签约主体 */
    signCompany?: string;
    /** 签订日期 */
    signDate?: string;
    /** 合同开始日期 */
    startDate?: string;
    /** 合同结束日期 */
    endDate?: string;
    /** 试用期开始日期 */
    probationStartDate?: string;
    /** 试用期结束日期 */
    probationEndDate?: string;
    /** 试用期工资 */
    probationSalary?: number;
    /** 转正工资 */
    regularSalary?: number;
    /** 解除终止状态：0-正常 1-已解除 2-已终止 */
    terminateStatus?: number;
    /** 解除/终止日期 */
    terminateDate?: string;
    /** 解除/终止原因 */
    terminateReason?: string;
    /** 合同状态（动态计算）：1-待生效 2-生效中 3-即将到期 4-已到期 5-已解除 6-已终止 */
    status?: number;
    /** 附件 */
    attachmentList?: AttachmentItem[];
    /** 附件 blobId 列表 */
    blobIds?: number[];
    remark?: string;
    createTime?: string;
  }

  /** 附件项 */
  export interface AttachmentItem {
    id: number;
    name?: string;
    url?: string;
    uid?: string;
  }

  /** 员工合同查询参数 */
  export interface EmployeeContractPageParam extends PageParam {
    contractNo?: string;
    employeeId?: number;
    contractType?: number;
    contractTermType?: number;
    terminateStatus?: number;
    status?: number;
    /** 到期类型：1-即将到期 2-已到期 */
    expiryType?: number;
  }

  /** 解除/终止合同请求 */
  export interface TerminateReq {
    id: number;
    terminateStatus: number;
    terminateDate: string;
    terminateReason: string;
  }
}

/** 获取员工合同分页列表 */
export function getEmployeeContractPage(
  params: HrmEmployeeContractApi.EmployeeContractPageParam,
) {
  return requestClient.get<PageResult<HrmEmployeeContractApi.EmployeeContract>>(
    '/hrm/employee-contract/page',
    { params },
  );
}

/** 获取员工合同详情 */
export function getEmployeeContract(id: number) {
  return requestClient.get<HrmEmployeeContractApi.EmployeeContract>(
    `/hrm/employee-contract/get?id=${id}`,
  );
}

/** 创建员工合同 */
export function createEmployeeContract(data: HrmEmployeeContractApi.EmployeeContract) {
  return requestClient.post('/hrm/employee-contract/create', data);
}

/** 更新员工合同 */
export function updateEmployeeContract(data: HrmEmployeeContractApi.EmployeeContract) {
  return requestClient.put('/hrm/employee-contract/update', data);
}

/** 解除/终止员工合同 */
export function terminateEmployeeContract(data: HrmEmployeeContractApi.TerminateReq) {
  return requestClient.put('/hrm/employee-contract/terminate', data);
}

/** 删除员工合同 */
export function deleteEmployeeContract(id: number) {
  return requestClient.delete(`/hrm/employee-contract/delete?id=${id}`);
}

/** 获取即将到期合同数量 */
export function getExpiringContractCount() {
  return requestClient.get<number>('/hrm/employee-contract/expiring-count');
}
