import type { PageParam, PageResult } from '@vben/request';

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

export namespace AssetRequisitionApi {
  /** 归还状态 */
  export const ReturnStatus = {
    NOT_RETURNED: 1,
    PARTIAL: 2,
    RETURNED: 3,
  } as const;

  /** 资产领用 */
  export interface AssetRequisition {
    id?: number;
    no?: string;
    assetId?: number;
    assetNo?: string;
    assetName?: string;
    category?: number;
    categoryName?: string;
    custodianId?: number;
    custodianName?: string;
    recipientId?: number;
    recipientName?: string;
    requisitionTime?: string;
    quantity?: number;
    purpose?: string;
    expectedReturnDate?: string;
    returnedQuantity?: number;
    remainingQuantity?: number;
    returnTime?: string;
    returnStatus?: number;
    returnStatusName?: string;
    remark?: string;
    createTime?: string;
  }

  /** 归还请求 */
  export interface ReturnReq {
    id: number;
    returnQuantity: number;
    returnTime?: string;
    remark?: string;
  }
}

/** 查询领用分页 */
export function getAssetRequisitionPage(params: PageParam) {
  return requestClient.get<PageResult<AssetRequisitionApi.AssetRequisition>>(
    '/asset/requisition/page',
    { params },
  );
}

/** 查询领用详情 */
export function getAssetRequisition(id: number) {
  return requestClient.get<AssetRequisitionApi.AssetRequisition>(
    `/asset/requisition/get?id=${id}`,
  );
}

/** 新增领用 */
export function createAssetRequisition(
  data: AssetRequisitionApi.AssetRequisition,
) {
  return requestClient.post('/asset/requisition/create', data);
}

/** 修改领用（仅领用人、用途、预计归还日期、备注） */
export function updateAssetRequisition(
  data: AssetRequisitionApi.AssetRequisition,
) {
  return requestClient.put('/asset/requisition/update', data);
}

/** 归还资产 */
export function returnAssetRequisition(data: AssetRequisitionApi.ReturnReq) {
  return requestClient.put('/asset/requisition/return', data);
}

/** 删除领用 */
export function deleteAssetRequisition(id: number) {
  return requestClient.delete('/asset/requisition/delete', {
    params: { id },
  });
}
