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

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

export namespace HrmLeaveApi {
  /** 请假申请 */
  export interface Leave {
    id?: number;
    employeeId?: number;
    employeeName?: string;
    deptName?: string;
    leaveType?: number;
    startTime?: string;
    endTime?: string;
    duration?: number;
    reason?: string;
    fileUrl?: string;
    status?: number;
    processInstanceId?: string;
    remark?: string;
    createTime?: string;
  }
}

/** 查询请假申请分页列表 */
export function getLeavePage(params: PageParam) {
  return requestClient.get<PageResult<HrmLeaveApi.Leave>>(
    '/hrm/leave/page',
    { params },
  );
}

/** 查询请假申请详情 */
export function getLeave(id: number) {
  return requestClient.get<HrmLeaveApi.Leave>(`/hrm/leave/get?id=${id}`);
}

/** 新增请假申请（草稿） */
export function createLeave(data: HrmLeaveApi.Leave) {
  return requestClient.post('/hrm/leave/create', data);
}

/** 更新请假申请 */
export function updateLeave(data: HrmLeaveApi.Leave) {
  return requestClient.put('/hrm/leave/update', data);
}

/** 删除请假申请 */
export function deleteLeave(id: number) {
  return requestClient.delete(`/hrm/leave/delete?id=${id}`);
}

/** 提交请假申请（发起审批） */
export function submitLeave(id: number) {
  return requestClient.post(`/hrm/leave/submit?id=${id}`);
}

/** 撤销请假申请 */
export function cancelLeave(id: number) {
  return requestClient.post(`/hrm/leave/cancel?id=${id}`);
}

/** 获取可用流程定义列表 */
export function getLeaveApproveProcessDefinitionList() {
  return requestClient.get<any[]>('/hrm/leave/approve-process-definition-list');
}