import http from './http'
import type {
  Benefit,
  Coupon,
  CouponPayload,
  CouponQuery,
  DashboardStats,
  EquityImageCategory,
  FamilyCardApplication,
  FamilyCardQuery,
  ChildCardApplication,
  ChildCardQuery,
  Merchant,
  MerchantPayload,
  MerchantQuery,
  Order,
  OrderQuery,
  PageResult,
  Product,
  ProductPayload,
  ProductQuery,
  RefundQuery,
  RefundRecord,
  ServiceApplication,
  ServiceApplicationQuery,
  Talent,
  TalentAdvisor,
  AdminRole,
  AdminStaff,
  TalentCard,
  TalentPayload,
  TalentImportResult,
  TalentQuery,
  VerificationQuery,
  VerificationRecord,
  UpgradeApplication,
  UpgradeApplicationQuery,
  MovieTicketRecord,
  MovieTicketRecordQuery,
  MovieTicketRule,
  NewsArticle,
  NewsArticlePayload,
  NewsArticleQuery,
  PolicyArticle,
  PolicyArticlePayload,
  PolicyArticleQuery,
} from '../types/admin'

export interface ImageUploadResult {
  url: string
}

function unwrapRecords<T>(payload: PageResult<T> | T[]): T[] {
  if (Array.isArray(payload)) {
    return payload
  }
  return Array.isArray(payload?.records) ? payload.records : []
}

export function getDashboard(params: Record<string, any> = {}) {
  return http.get<DashboardStats, DashboardStats>('/api/admin/workbench/statistics', { params })
}

export function uploadAdminImage(file: File) {
  const data = new FormData()
  data.append('file', file)
  return http.post<ImageUploadResult, ImageUploadResult>('/api/admin/uploads/images', data)
}
export function uploadAdminPdf(file: File) {
  const data = new FormData()
  data.append('file', file)
  return http.post<ImageUploadResult, ImageUploadResult>('/api/admin/uploads/pdfs', data)
}
export function uploadAdminVideo(file: File) {
  const data = new FormData()
  data.append('file', file)
  return http.post<ImageUploadResult, ImageUploadResult>('/api/admin/uploads/videos', data)
}

export function getPlatformSettings() { return http.get<Record<string, string>, Record<string, string>>('/api/admin/management/settings') }
export interface AdminPendingNotice {
  id: string
  category: string
  content: string
  time: string
  path: string
}
export function getAdminPendingNotices() { return http.get<AdminPendingNotice[], AdminPendingNotice[]>('/api/admin/business/pending-notices') }
export function savePlatformSettings(payload: Record<string, string>) { return http.put<Record<string, string>, Record<string, string>>('/api/admin/management/settings', payload) }
export function getProtocolSetting(key: string) { return http.get<Record<string, any>, Record<string, any>>(`/api/admin/management/protocols/${key}`) }
export function saveProtocolSetting(key: string, contentHtml: string) { return http.put<Record<string, any>, Record<string, any>>(`/api/admin/management/protocols/${key}`, { contentHtml }) }
export function getAdminRoles() { return http.get<AdminRole[], AdminRole[]>('/api/admin/management/roles') }
export function createAdminRole(payload: Omit<AdminRole, 'id' | 'createdAt'>) { return http.post<AdminRole, AdminRole>('/api/admin/management/roles', payload) }
export function updateAdminRole(id: number | string, payload: Omit<AdminRole, 'id' | 'createdAt'>) { return http.put<AdminRole, AdminRole>(`/api/admin/management/roles/${id}`, payload) }
export function updateAdminRoleStatus(id: number | string, status: number) { return http.patch<AdminRole, AdminRole>(`/api/admin/management/roles/${id}/status`, { status }) }
export function deleteAdminRole(id: number | string) { return http.delete<any, any>(`/api/admin/management/roles/${id}`) }
export function getAdminStaff() { return http.get<AdminStaff[], AdminStaff[]>('/api/admin/management/staff') }
export function checkAdminStaffAccount(account: string) { return http.get<{ available: boolean }, { available: boolean }>('/api/admin/management/staff/account-available', { params: { account } }) }
export function createAdminStaff(payload: Omit<AdminStaff, 'id' | 'createdAt'> & { password: string }) { return http.post<AdminStaff, AdminStaff>('/api/admin/management/staff', payload) }
export function updateAdminStaff(id: number | string, payload: Omit<AdminStaff, 'id' | 'createdAt'> & { password?: string }) { return http.put<AdminStaff, AdminStaff>(`/api/admin/management/staff/${id}`, payload) }
export function resetAdminStaffPassword(id: number | string, password: string) { return http.patch<any, any>(`/api/admin/management/staff/${id}/password`, { password }) }
export function deleteAdminStaff(id: number | string) { return http.delete<any, any>(`/api/admin/management/staff/${id}`) }
export interface MerchantSettlementQuery {
  page?: number
  size?: number
  merchantName?: string
  contactMobile?: string
  merchantType?: string
  status?: string
  startDate?: string
  endDate?: string
}
export function getMerchantSettlement(kind: 'onboardings' | 'bank-cards', params: MerchantSettlementQuery = {}) { return http.get<PageResult<any>, PageResult<any>>(`/api/admin/management/merchant-settlement/${kind}`, { params }) }
/** 结算记录直接来自斗拱：按日期区间返回真实结算流水，用于监控每天自动结算了多少到银行卡。 */
export function getMerchantSettlements(params: { beginDate?: string; endDate?: string; size?: number } = {}) {
  return http.get<{ records: Record<string, any>[]; total: number; failures: string[] }, { records: Record<string, any>[]; total: number; failures: string[] }>('/api/admin/management/merchant-settlement/settlements', { params })
}
export function getMerchantOnboardingDetail(id: number | string) { return http.get<Record<string, any>, Record<string, any>>(`/api/admin/management/merchant-settlement/onboardings/${id}`) }

export function getAdminNews(params: NewsArticleQuery = {}) {
  return http.get<PageResult<NewsArticle>, PageResult<NewsArticle>>('/api/admin/business/news', { params })
}

export function getAdminNewsDetail(id: number | string) {
  return http.get<NewsArticle, NewsArticle>(`/api/admin/business/news/${id}`)
}

export function createAdminNews(payload: NewsArticlePayload) {
  return http.post<NewsArticle, NewsArticle>('/api/admin/business/news', payload)
}

export function updateAdminNews(id: number | string, payload: NewsArticlePayload) {
  return http.put<NewsArticle, NewsArticle>(`/api/admin/business/news/${id}`, payload)
}

export function updateAdminNewsStatus(id: number | string, status: number) {
  return http.patch<NewsArticle, NewsArticle>(`/api/admin/business/news/${id}/status`, { status })
}

export function getAdminPolicies(params: PolicyArticleQuery = {}) {
  return http.get<PageResult<PolicyArticle>, PageResult<PolicyArticle>>('/api/admin/business/policies', { params })
}
export function getAdminPolicyDetail(id: number | string) { return http.get<PolicyArticle, PolicyArticle>(`/api/admin/business/policies/${id}`) }
export function createAdminPolicy(payload: PolicyArticlePayload) { return http.post<PolicyArticle, PolicyArticle>('/api/admin/business/policies', payload) }
export function updateAdminPolicy(id: number | string, payload: PolicyArticlePayload) { return http.put<PolicyArticle, PolicyArticle>(`/api/admin/business/policies/${id}`, payload) }
export function updateAdminPolicyStatus(id: number | string, status: number) { return http.patch<PolicyArticle, PolicyArticle>(`/api/admin/business/policies/${id}/status`, { status }) }

export function getTalents(params: TalentQuery = {}) {
  return http.get<PageResult<Talent>, PageResult<Talent>>('/api/talents', { params })
}

export function exportTalents(params: TalentQuery = {}) {
  return http.get<Blob, Blob>('/api/talents/export', { params, responseType: 'blob' })
}

export function downloadTalentImportTemplate() {
  return http.get<Blob, Blob>('/api/talents/import-template', { responseType: 'blob' })
}

export function importTalents(file: File) {
  const data = new FormData()
  data.append('file', file)
  return http.post<TalentImportResult, TalentImportResult>('/api/talents/import', data)
}

export function getTalentDetail(id: number | string) {
  return http.get<Talent, Talent>(`/api/talents/${id}`)
}

export function updateTalentMobile(id: number | string, mobile: string) {
  return http.patch<Talent, Talent>(`/api/talents/${id}/mobile`, { mobile })
}

export function updateTalentCertification(id: number | string, payload: Pick<TalentPayload,
  'name' | 'idCardNo' | 'gender' | 'workUnit' | 'workAddress' | 'contactAddress'>) {
  return http.patch<Talent, Talent>(`/api/talents/${id}/certification`, payload)
}

export function updateTalentLevel(id: number | string, talentLevel: string) {
  return http.patch<Talent, Talent>(`/api/talents/${id}/card-level`, { talentLevel })
}

export function getTalentAdvisors() {
  return http.get<TalentAdvisor[], TalentAdvisor[]>('/api/talents/advisors')
}

export function updateTalentAdvisor(id: number | string, advisorId?: number | string) {
  return http.patch<Talent, Talent>(`/api/talents/${id}/advisor`, { advisorId: advisorId ?? null })
}

export function getTalentServiceStaff() {
  return http.get<AdminStaff[], AdminStaff[]>('/api/talents/service-staff')
}

export function updateTalentServiceStaff(id: number | string, staffId?: number | string) {
  return http.patch<Talent, Talent>(`/api/talents/${id}/service-staff`, { advisorId: staffId ?? null })
}

export function updateTalentStatus(id: number | string, status: number) {
  return http.patch<Talent, Talent>(`/api/talents/${id}/status`, { status })
}

export function getTalentCards(id: number | string) {
  return http.get<PageResult<TalentCard>, PageResult<TalentCard>>(`/api/talents/${id}/cards`)
}

export function createTalent(payload: TalentPayload) {
  return http.post<Talent, Talent>('/api/talents', payload)
}

export function getMerchants() {
  return http.get<PageResult<Merchant>, PageResult<Merchant>>('/api/app/merchants').then(unwrapRecords)
}

export function getAdminMerchants(params: MerchantQuery = {}) {
  return http.get<PageResult<Merchant>, PageResult<Merchant>>('/api/admin/business/merchants', { params })
}

export function getAdminMerchantDetail(id: number | string) {
  return http.get<Merchant, Merchant>(`/api/admin/business/merchants/${id}`)
}

export function checkMerchantLoginAccount(account: string, merchantId?: number | string) {
  return http.get<{ available: boolean }, { available: boolean }>('/api/admin/business/merchants/login-account-available', {
    params: { account, merchantId },
  })
}

export function createMerchant(payload: MerchantPayload) {
  return http.post<Merchant, Merchant>('/api/admin/business/merchants', payload)
}

export function updateMerchant(id: number | string, payload: MerchantPayload) {
  return http.put<Merchant, Merchant>(`/api/admin/business/merchants/${id}`, payload)
}

export function updateMerchantStatus(id: number | string, status: number) {
  return http.patch<Merchant, Merchant>(`/api/admin/business/merchants/${id}/status`, { status })
}

export function updateMerchantRecommend(id: number | string, recommend: number) {
  return http.patch<Merchant, Merchant>(`/api/admin/business/merchants/${id}/recommend`, { recommend })
}

export function getBenefits() {
  return http.get<PageResult<Benefit>, PageResult<Benefit>>('/api/app/benefits').then(unwrapRecords)
}

export function getProducts() {
  return http.get<PageResult<Product>, PageResult<Product>>('/api/app/products').then(unwrapRecords)
}

export function getAdminProducts(params: ProductQuery = {}) {
  return http.get<PageResult<Product>, PageResult<Product>>('/api/admin/business/products', { params })
}

export function getAdminProductDetail(id: number | string) {
  return http.get<Product, Product>(`/api/admin/business/products/${id}`)
}

export function createProduct(payload: ProductPayload) {
  return http.post<Product, Product>('/api/admin/business/products', payload)
}

export function updateProduct(id: number | string, payload: ProductPayload) {
  return http.put<Product, Product>(`/api/admin/business/products/${id}`, payload)
}

export function updateProductStatus(id: number | string, status: number) {
  return http.patch<Product, Product>(`/api/admin/business/products/${id}/status`, { status })
}

export function deleteProduct(id: number | string) {
  return http.delete<Product, Product>(`/api/admin/business/products/${id}`)
}

export function auditProduct(id: number | string, auditStatus: number, auditRemark = '') {
  return http.patch<Product, Product>(`/api/admin/business/products/${id}/audit`, {
    auditStatus,
    auditRemark,
  })
}

export function getAdminCoupons(params: CouponQuery = {}) {
  return http.get<PageResult<Coupon>, PageResult<Coupon>>('/api/admin/business/coupons', { params })
}

export function getAdminCouponDetail(id: number | string) {
  return http.get<Coupon, Coupon>(`/api/admin/business/coupons/${id}`)
}

export function createCoupon(payload: CouponPayload) {
  return http.post<Coupon, Coupon>('/api/admin/business/coupons', payload)
}

export function updateCoupon(id: number | string, payload: CouponPayload) {
  return http.put<Coupon, Coupon>(`/api/admin/business/coupons/${id}`, payload)
}

export function updateCouponStatus(id: number | string, status: number) {
  return http.patch<Coupon, Coupon>(`/api/admin/business/coupons/${id}/status`, { status })
}

export function deleteCoupon(id: number | string) {
  return http.delete<Coupon, Coupon>(`/api/admin/business/coupons/${id}`)
}

export function getOrders(params: OrderQuery = {}) {
  return http.get<PageResult<Order>, PageResult<Order>>('/api/orders', { params })
}

export function getOrderDetail(orderNo: string) {
  return http.get<Order, Order>(`/api/orders/${orderNo}`)
}

export function payOrder(orderNo: string) {
  return http.post<Order, Order>(`/api/orders/${orderNo}/pay`)
}

export function verifyOrder(orderNo: string, verifyType: string, merchantId?: number | string) {
  return http.post<Order, Order>(`/api/orders/${orderNo}/verify`, { verifyType, merchantId })
}

export function refundOrder(orderNo: string, refundAmount?: number, reason = '后台退款') {
  return http.post<RefundRecord, RefundRecord>(`/api/orders/${orderNo}/refund`, {
    refundAmount,
    reason,
    operatorName: '管理员',
  })
}

export function getRefundRecords(params: RefundQuery = {}) {
  return http.get<PageResult<RefundRecord>, PageResult<RefundRecord>>('/api/orders/refunds', { params })
}

export function getVerificationRecords(params: VerificationQuery = {}) {
  return http.get<PageResult<VerificationRecord>, PageResult<VerificationRecord>>('/api/orders/verifications', { params })
}

function serviceApplicationParams(params: ServiceApplicationQuery = {}) {
  const requestParams: Record<string, unknown> = { ...params }
  if (params.talentKeyword && !requestParams.keyword) {
    requestParams.keyword = params.talentKeyword
  }
  if (!requestParams.serviceKeyword) {
    requestParams.serviceKeyword = params.merchantName || params.hospitalName || params.parkingLot
  }
  delete requestParams.talentKeyword
  delete requestParams.merchantName
  delete requestParams.hospitalName
  delete requestParams.parkingLot
  return requestParams
}

export function getServiceApplications(params: ServiceApplicationQuery = {}) {
  return http.get<PageResult<ServiceApplication>, PageResult<ServiceApplication>>('/api/admin/service-appointment-applications', {
    params: serviceApplicationParams(params),
  })
}

export function getServiceApplicationDetail(id: number | string) {
  return http.get<ServiceApplication, ServiceApplication>(`/api/admin/service-appointment-applications/${id}`)
}

export function updateServiceApplicationStatus(
  id: number | string,
  status: string,
  handlerName = '管理员',
  remark = '',
  rejectReason = '',
) {
  return http.patch<ServiceApplication, ServiceApplication>(`/api/admin/service-appointment-applications/${id}/status`, {
    status,
    handlerName,
    remark,
    rejectReason,
  })
}

export function exportServiceApplications(params: ServiceApplicationQuery = {}) {
  return http.get<Blob, Blob>('/api/admin/service-appointment-applications/export', {
    params: serviceApplicationParams(params),
    responseType: 'blob',
  })
}

export function getFamilyCardApplications(params: FamilyCardQuery = {}) {
  return http.get<PageResult<FamilyCardApplication>, PageResult<FamilyCardApplication>>(
    '/api/admin/dependent-card-applies',
    { params },
  )
}

export function getFamilyCardApplicationDetail(id: number | string) {
  return http.get<FamilyCardApplication, FamilyCardApplication>(`/api/admin/dependent-card-applies/${id}`)
}

export function auditFamilyCardApplication(id: number | string, status: string | number, auditRemark = '') {
  const statusValue = typeof status === 'number' ? status : status === '通过' || status === '已通过' ? 1 : 2
  return http.patch<FamilyCardApplication, FamilyCardApplication>(`/api/admin/dependent-card-applies/${id}/audit`, {
    status: statusValue,
    auditRemark,
  })
}

export function unbindFamilyCard(id: number | string) {
  return http.patch<FamilyCardApplication, FamilyCardApplication>(`/api/admin/dependent-card-applies/${id}/unbind`)
}

export function getUpgradeApplications(params: UpgradeApplicationQuery = {}) {
  return http.get<PageResult<UpgradeApplication>, PageResult<UpgradeApplication>>(
    '/api/admin/cards/upgrade-applications',
    { params },
  )
}

export function getUpgradeApplicationDetail(id: number | string) {
  return http.get<UpgradeApplication, UpgradeApplication>(`/api/admin/cards/upgrade-applications/${id}`)
}

export function getChildCardApplications(params: ChildCardQuery = {}) {
  return http.get<PageResult<ChildCardApplication>, PageResult<ChildCardApplication>>(
    '/api/admin/cards/child-applications',
    { params },
  )
}

export function getChildCardApplicationDetail(id: number | string) {
  return http.get<ChildCardApplication, ChildCardApplication>(`/api/admin/cards/child-applications/${id}`)
}

export function auditChildCardApplication(id: number | string, status: string, auditRemark = '') {
  return http.patch<ChildCardApplication, ChildCardApplication>(`/api/admin/cards/child-applications/${id}/audit`, {
    status,
    auditorName: '管理员',
    auditRemark,
  })
}

export function auditUpgradeApplication(id: number | string, status: string, auditRemark = '') {
  return http.patch<UpgradeApplication, UpgradeApplication>(`/api/admin/cards/upgrade-applications/${id}/audit`, {
    status,
    auditorName: '管理员',
    auditRemark,
  })
}

export function getEquityImageCategories() {
  return http.get<EquityImageCategory[], EquityImageCategory[]>('/api/admin/operation/equity-images')
}

export function saveEquityImageCategory(payload: EquityImageCategory) {
  return http.put<EquityImageCategory, EquityImageCategory>('/api/admin/operation/equity-images', payload)
}

export function getMovieTicketRules() {
  return http.get<MovieTicketRule[], MovieTicketRule[]>('/api/admin/operation/movie-ticket-rules')
}

export function saveMovieTicketRules(rules: MovieTicketRule[]) {
  return http.put<MovieTicketRule[], MovieTicketRule[]>('/api/admin/operation/movie-ticket-rules', rules)
}

export function getMovieTicketRecords(params: MovieTicketRecordQuery = {}) {
  return http.get<PageResult<MovieTicketRecord>, PageResult<MovieTicketRecord>>(
    '/api/admin/operation/movie-ticket-records',
    { params },
  )
}


export type AnyRecord = Record<string, any>

export function getServiceAppointmentOperationLogs(id: number | string) {
  return http.get<AnyRecord[], AnyRecord[]>(`/api/admin/service-appointment-applications/${id}/operation-logs`)
}

export function getParkingPlateSubmissions(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/parking-plate-submissions', { params })
}

export function getParkingPlateSubmissionDetail(id: number | string) {
  return http.get<AnyRecord, AnyRecord>(`/api/admin/parking-plate-submissions/${id}`)
}

export function getParkingPlateOperationLogs(id: number | string) {
  return http.get<AnyRecord[], AnyRecord[]>(`/api/admin/parking-plate-submissions/${id}/operation-logs`)
}

export function updateParkingPlateSubmissionStatus(id: number | string, status: string, remark = '', handlerName = '管理员') {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/parking-plate-submissions/${id}/status`, { status, remark, handlerName })
}

export function getDependentCardApplies(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/dependent-card-applies', { params })
}

export function getDependentCardApplyDetail(id: number | string) {
  return http.get<AnyRecord, AnyRecord>(`/api/admin/dependent-card-applies/${id}`)
}

export function auditDependentCardApply(id: number | string, status: number, auditRemark = '') {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/dependent-card-applies/${id}/audit`, { status, auditRemark })
}

export function getDependentCardApplyStatusLogs(id: number | string) {
  return http.get<AnyRecord[], AnyRecord[]>(`/api/admin/dependent-card-applies/${id}/status-logs`)
}

export function getBenefitServiceCoupons(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/benefit-service-config/coupons', { params })
}

export function getBenefitServiceCouponDetail(id: number | string) {
  return http.get<AnyRecord, AnyRecord>(`/api/admin/benefit-service-config/coupons/${id}`)
}

export function createBenefitServiceCoupon(payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>('/api/admin/benefit-service-config/coupons', payload)
}

export function updateBenefitServiceCoupon(id: number | string, payload: AnyRecord) {
  return http.put<AnyRecord, AnyRecord>(`/api/admin/benefit-service-config/coupons/${id}`, payload)
}

export function updateBenefitServiceCouponStatus(id: number | string, status: number) {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/benefit-service-config/coupons/${id}/status`, { status })
}

export function issueBenefitServiceCoupon(id: number | string, payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>(`/api/admin/benefit-service-config/coupons/${id}/claims`, payload)
}

export function getBenefitServiceCouponClaims(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/benefit-service-config/coupons/claims', { params })
}

export function updateBenefitServiceCouponClaimStatus(claimId: number | string, payload: AnyRecord) {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/benefit-service-config/coupons/claims/${claimId}/status`, payload)
}

export function getCarWashJumpConfigs(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/car-wash-merchant-jump-configs', { params })
}

export function saveCarWashJumpConfig(merchantId: number | string, payload: AnyRecord) {
  return http.put<AnyRecord, AnyRecord>(`/api/admin/car-wash-merchant-jump-configs/${merchantId}`, payload)
}

export function getCarWashCredentials(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/car-wash-benefits/credentials', { params })
}

export function getCarWashCredentialDetail(id: number | string) {
  return http.get<AnyRecord, AnyRecord>(`/api/admin/car-wash-benefits/credentials/${id}`)
}

export function auditCarWashCredential(id: number | string, status: number, auditRemark = '') {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/car-wash-benefits/credentials/${id}/audit`, { status, auditRemark })
}

export function rollbackCarWashCredential(id: number | string, rollbackReason = '') {
  return http.post<AnyRecord, AnyRecord>(`/api/admin/car-wash-benefits/credentials/${id}/rollback`, { rollbackReason })
}

export function getDisplayServices(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/display-services', { params })
}

export function getDisplayServiceDetail(serviceId: number | string) {
  return http.get<AnyRecord, AnyRecord>(`/api/admin/display-services/${serviceId}`)
}

export function getDisplayServiceCategories() {
  return http.get<AnyRecord[], AnyRecord[]>('/api/admin/display-services/categories')
}

export function createDisplayService(payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>('/api/admin/display-services', payload)
}

export function updateDisplayService(serviceId: number | string, payload: AnyRecord) {
  return http.put<AnyRecord, AnyRecord>(`/api/admin/display-services/${serviceId}`, payload)
}

export function updateDisplayServiceStatus(serviceId: number | string, status: number) {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/display-services/${serviceId}/status`, { status })
}

export function updateDisplayServiceSort(serviceId: number | string, sortNo: number) {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/display-services/${serviceId}/sort`, { sortNo })
}

export function getTicketPackages(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/ticket-packages', { params })
}

export function getTicketPackageDetail(packageId: number | string) {
  return http.get<AnyRecord, AnyRecord>(`/api/admin/ticket-packages/${packageId}`)
}

export function createTicketPackage(payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>('/api/admin/ticket-packages', payload)
}

export function updateTicketPackage(packageId: number | string, payload: AnyRecord) {
  return http.put<AnyRecord, AnyRecord>(`/api/admin/ticket-packages/${packageId}`, payload)
}

export function updateTicketPackageStatus(packageId: number | string, status: string) {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/ticket-packages/${packageId}/status`, { status })
}

export function importTicketPackageCodes(packageId: number | string, payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>(`/api/admin/ticket-packages/${packageId}/codes/import`, payload)
}

export function generateTicketPackageCodes(packageId: number | string, payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>(`/api/admin/ticket-packages/${packageId}/codes/generate`, payload)
}

export function getTicketPackageCodes(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/ticket-packages/codes', { params })
}

export function voidTicketPackageCode(codeId: number | string, remark = '') {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/ticket-packages/codes/${codeId}/void`, { remark })
}

export function getTicketPackageClaims(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/ticket-packages/claims', { params })
}

export function supplementTicketPackageClaim(payload: AnyRecord) {
  return http.post<AnyRecord, AnyRecord>('/api/admin/ticket-packages/claims/supplement', payload)
}

export function getDisplayMerchantPolicies(params: AnyRecord = {}) {
  return http.get<PageResult<AnyRecord>, PageResult<AnyRecord>>('/api/admin/display-merchant-policies', { params })
}

export function updateDisplayMerchantPolicyStatus(merchantId: number | string, status: number) {
  return http.patch<AnyRecord, AnyRecord>(`/api/admin/display-merchant-policies/${merchantId}/status`, { status })
}



