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

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

export namespace SrmTenderApi {
  export interface TenderProjectVO {
    id?: number;
    tenderNo?: string;
    tenderName: string;
    tenderType: number;
    purchaseOrg?: string;
    projectLeaderId?: number;
    projectLeaderName?: string;
    tenderStatus?: number;
    budgetAmount?: number;
    startTime?: string;
    endTime?: string;
    bidOpenTime?: string;
    tenderDesc?: string;
    qualificationRequirements?: string;
    purchaseRequestId?: number;
    awardId?: number;
    purchaseOrderNo?: string;
    createTime?: string;
  }

  export interface TenderMaterialVO {
    id?: number;
    tenderProjectId: number;
    productId?: number;
    productCode?: string;
    productName: string;
    productSpec?: string;
    unit?: string;
    quantity?: number;
    techRequirement?: string;
    estimatedPrice?: number;
    sort?: number;
  }

  export interface TenderBidVO {
    id?: number;
    tenderProjectId: number;
    supplierId: number;
    supplierName?: string;
    bidNo: string;
    bidStatus?: number;
    bidTime?: string;
    bidTotalAmount?: number;
    bidFileName?: string;
    bidFileUrl?: string;
    createTime?: string;
  }

  export interface QuoteVO {
    id?: number;
    tenderProjectId?: number;
    supplierId?: number;
    bidId: number;
    tenderMaterialId: number;
    materialName?: string;
    quotePrice?: number;
    taxRate?: number;
    deliveryCycle?: number;
    paymentTerms?: string;
    warrantyPeriod?: number;
    remark?: string;
  }

  export interface BidEvaluationVO {
    id?: number;
    tenderProjectId: number;
    supplierId: number;
    supplierName?: string;
    bidId: number;
    priceScore?: number;
    techScore?: number;
    deliveryScore?: number;
    serviceScore?: number;
    compositeScore?: number;
    rank?: number;
    evaluatorId?: number;
    evaluatorName?: string;
    evaluationOpinion?: string;
  }

  export interface BidAwardVO {
    id?: number;
    tenderProjectId: number;
    supplierId: number;
    supplierName?: string;
    bidId: number;
    awardNo: string;
    awardStatus?: number;
    awardAmount?: number;
    awardTime?: string;
    noticeFileName?: string;
    noticeFileUrl?: string;
    purchaseOrderId?: number;
    remark?: string;
  }
}

// ========== 招标项目 ==========

export function getTenderProjectPage(params: PageParam) {
  return requestClient.get<PageResult<SrmTenderApi.TenderProjectVO>>('/srm/tender-project/page', { params });
}

export function getTenderProject(id: number) {
  return requestClient.get<SrmTenderApi.TenderProjectVO>(`/srm/tender-project/get?id=${id}`);
}

export function createTenderProject(data: SrmTenderApi.TenderProjectVO) {
  return requestClient.post('/srm/tender-project/create', data);
}

export function updateTenderProject(data: SrmTenderApi.TenderProjectVO) {
  return requestClient.put('/srm/tender-project/update', data);
}

export function deleteTenderProject(id: number) {
  return requestClient.delete(`/srm/tender-project/delete?id=${id}`);
}

export function publishTender(id: number) {
  return requestClient.put(`/srm/tender-project/publish?id=${id}`);
}

export function closeTender(id: number) {
  return requestClient.put(`/srm/tender-project/close?id=${id}`);
}

export function startBidding(id: number) {
  return requestClient.put(`/srm/tender-project/start-bidding?id=${id}`);
}

export function startEvaluation(id: number) {
  return requestClient.put(`/srm/tender-project/start-evaluation?id=${id}`);
}

// ========== 物料子表 ==========

export function getMaterialList(tenderProjectId: number) {
  return requestClient.get<SrmTenderApi.TenderMaterialVO[]>(`/srm/tender-project/material/list?tenderProjectId=${tenderProjectId}`);
}

export function createMaterial(data: SrmTenderApi.TenderMaterialVO) {
  return requestClient.post('/srm/tender-project/material/create', data);
}

export function updateMaterial(data: SrmTenderApi.TenderMaterialVO) {
  return requestClient.put('/srm/tender-project/material/update', data);
}

export function deleteMaterial(id: number) {
  return requestClient.delete(`/srm/tender-project/material/delete?id=${id}`);
}

// ========== 投标管理 ==========

export function getBidListByProject(tenderProjectId: number) {
  return requestClient.get<SrmTenderApi.TenderBidVO[]>(`/srm/tender-bid/list-by-project?tenderProjectId=${tenderProjectId}`);
}

export function getBid(id: number) {
  return requestClient.get<SrmTenderApi.TenderBidVO>(`/srm/tender-bid/get?id=${id}`);
}

export function createBid(data: SrmTenderApi.TenderBidVO) {
  return requestClient.post('/srm/tender-bid/create', data);
}

export function withdrawBid(id: number) {
  return requestClient.put(`/srm/tender-bid/withdraw?id=${id}`);
}

// ========== 报价管理 ==========

export function getQuoteList(bidId: number) {
  return requestClient.get<SrmTenderApi.QuoteVO[]>(`/srm/tender-bid/quote/list-by-bid?bidId=${bidId}`);
}

export function createQuote(data: SrmTenderApi.QuoteVO) {
  return requestClient.post('/srm/tender-bid/quote/create', data);
}

export function updateQuote(data: SrmTenderApi.QuoteVO) {
  return requestClient.put('/srm/tender-bid/quote/update', data);
}

// ========== 评标管理 ==========

export function getEvaluationList(tenderProjectId: number) {
  return requestClient.get<SrmTenderApi.BidEvaluationVO[]>(`/srm/bid-evaluation/list-by-project?tenderProjectId=${tenderProjectId}`);
}

export function createBidEvaluation(data: SrmTenderApi.BidEvaluationVO) {
  return requestClient.post('/srm/bid-evaluation/create', data);
}

export function updateBidEvaluation(data: SrmTenderApi.BidEvaluationVO) {
  return requestClient.put('/srm/bid-evaluation/update', data);
}

export function calculateRanking(tenderProjectId: number) {
  return requestClient.put(`/srm/bid-evaluation/calculate-ranking?tenderProjectId=${tenderProjectId}`);
}

// ========== 开标 ==========

export function createBidOpen(tenderProjectId: number) {
  return requestClient.post(`/srm/bid-evaluation/bid-open/create?tenderProjectId=${tenderProjectId}`);
}

export function getBidOpen(id: number) {
  return requestClient.get(`/srm/bid-evaluation/bid-open/get?id=${id}`);
}

// ========== 定标管理 ==========

export function createAward(data: SrmTenderApi.BidAwardVO) {
  return requestClient.post('/srm/bid-award/create', data);
}

export function deleteAward(id: number) {
  return requestClient.delete(`/srm/bid-award/delete?id=${id}`);
}

export function getAward(id: number) {
  return requestClient.get<SrmTenderApi.BidAwardVO>(`/srm/bid-award/get?id=${id}`);
}

export function getAwardByProject(tenderProjectId: number) {
  return requestClient.get<SrmTenderApi.BidAwardVO>(`/srm/bid-award/get-by-project?tenderProjectId=${tenderProjectId}`);
}

export function approveAward(id: number) {
  return requestClient.put(`/srm/bid-award/approve?id=${id}`);
}

export function generatePurchaseOrder(id: number) {
  return requestClient.put(`/srm/bid-award/generate-purchase-order/${id}`);
}
