﻿export interface DashboardStats {
  talentCount?: number
  cardCount?: number
  merchantCount?: number
  orderCount?: number
  benefitCount?: number
  pendingProductCount?: number
  todayVerifyCount?: number
  pendingOrderCount?: number
  verifiedOrderCount?: number
  cardholderTotal?: number
  monthlyVerificationCount?: number
  monthlyVerificationOrders?: number
  totalSubsidyAmount?: number
  cumulativeSubsidyTotal?: number
  talentCompare?: number
  monthlyVerificationCompare?: number
  subsidyCompare?: number
  verificationPeriod?: 'week' | 'month' | 'year'
  verificationTrend?: Array<{ time: string; order: number; amount: number }>
  pendingItems?: Array<{ label: string; value: number; color?: string }>
  hotMerchants?: Array<{ rank: number; merchantName: string; verificationCount: number; verificationAmount: number }>
  orderCategoryShares?: Array<{ label: string; value: number; color: string }>
}

export interface PageResult<T> {
  records: T[]
  page: number
  size: number
  total: number
}

export interface NewsArticle {
  id: number | string
  title: string
  summary?: string
  coverUrl?: string
  source?: string
  author?: string
  content?: string
  viewCount?: number
  isTop?: number | boolean
  sortNo?: number
  publishTime?: string
  status?: number
  createdAt?: string
  updatedAt?: string
}

export interface NewsArticlePayload {
  title: string
  summary?: string
  coverUrl?: string
  source?: string
  author?: string
  content?: string
  isTop?: boolean
  sortNo?: number
  status?: number
}

export interface PolicyArticle extends NewsArticle {
  policyNo?: string
  subtitle?: string
}

export interface PolicyArticlePayload {
  title: string
  subtitle?: string
  coverUrl?: string
  author?: string
  source?: string
  content?: string
  isTop?: boolean
  sortNo?: number
  status?: number
}

export interface PolicyArticleQuery extends PageQuery {
  title?: string
  author?: string
  publishStart?: string
  publishEnd?: string
}

export interface NewsArticleQuery extends PageQuery {
  title?: string
  source?: string
  publishStart?: string
  publishEnd?: string
}

export interface PageQuery {
  page?: number
  size?: number
  keyword?: string
  type?: string
  status?: number
}

export interface Talent {
  id: number | string
  name: string
  mobile?: string
  idCardNo?: string
  gender?: number
  talentLevel?: string
  talentCardNo?: string
  sourceAreaType?: string
  orderCount?: number
  status?: number
  registerTime?: string
  workUnit?: string
  workAddress?: string
  contactAddress?: string
  advisorId?: number | string
  serviceStaffId?: number | string
}

export interface TalentAdvisor {
  id: number | string
  advisorName: string
  department?: string
  mobile?: string
  cardLevel?: string
}

export interface AdminRole { id: number | string; roleName: string; roleCode: string; remark?: string; permissionCodes?: string | string[]; status: number; createdAt?: string }
export interface AdminStaff { id: number | string; account: string; displayName: string; mobile?: string; roleCode: string; positionName?: string; customerWechat?: string; status: number; createdAt?: string }

export interface TalentQuery extends PageQuery {
  mobile?: string
  cardNo?: string
  level?: string
  registerStart?: string
  registerEnd?: string
}

export interface TalentPayload {
  name: string
  mobile?: string
  idCardNo?: string
  gender?: number
  workUnit?: string
  talentLevel?: string
  talentCardNo?: string
  sourceAreaType?: string
  workAddress?: string
  contactAddress?: string
  createdAt?: string
}

export interface TalentImportFailure {
  rowNumber: number
  name?: string
  reason: string
}

export interface TalentImportResult {
  successCount: number
  failureCount: number
  failures: TalentImportFailure[]
}

export interface TalentCard {
  id: number | string
  talentId?: number | string
  cardNo?: string
  cardType?: string
  cardLevel?: string
  validStart?: string
  validEnd?: string
  issueTime?: string
  status?: number
  expireTime?: string
  isFamilyCardEnabled?: number
  familyCardLimit?: number
}

export interface Merchant {
  id: number | string
  merchantName: string
  merchantType?: string
  merchantTypeCode?: string
  contactName?: string
  contactMobile?: string
  logoUrl?: string
  coverUrl?: string
  address?: string
  businessStatus?: string
  longitude?: number
  latitude?: number
  canLoginMerchantApp?: number
  loginAccount?: string
  groupBuyingEnabled?: number
  applicableStores?: Array<{
    id?: number | string
    name?: string
    storeName?: string
    address?: string
    longitude?: number
    latitude?: number
    canNavigate?: boolean | number
  }>
  usageInstructions?: string
  rightsText?: string
  miniProgramJumpType?: string
  miniProgramJumpUrl?: string
  merchantRightsConfig?: Array<{
    level: string
    enabled: boolean
    tag: string
    detail: string
    storeConsume: boolean
    discount: string
    governmentSubsidy: boolean
    consumeDesc: string
    consumeEnabled: boolean
    parkingType?: string // "free" | "paid"
    parkingScope?: string // "all" | "selected"
    externalLinkType?: string
    externalMiniProgramShortLink?: string
    externalMiniProgramPath?: string
    externalWebUrl?: string
  }> | string
  serviceLabel?: string
  businessHours?: Array<{ startTime: string; endTime: string }>
  isRecommend?: number
  sortNo?: number
  status?: number
  productCount?: number
  orderCount?: number
  reservationCount?: number
  createdAt?: string
  carWashExternalLinkType?: string
  carWashExternalMiniProgramShortLink?: string
  carWashExternalMiniProgramPath?: string
  carWashExternalWebUrl?: string
}

export interface MerchantPayload {
  merchantName: string
  merchantType?: string
  contactName?: string
  contactMobile?: string
  logoUrl?: string
  coverUrl?: string
  address?: string
  businessStatus?: string
  longitude?: number
  latitude?: number
  canLoginMerchantApp?: number
  loginAccount?: string
  loginPassword?: string
  groupBuyingEnabled?: number
  applicableStores?: Array<{
    id?: number | string
    name?: string
    storeName?: string
    address?: string
    longitude?: number
    latitude?: number
  }>
  usageInstructions?: string
  rightsText?: string
  miniProgramJumpType?: string
  miniProgramJumpUrl?: string
  merchantRightsConfig?: Array<{
    level: string
    enabled: boolean
    tag: string
    detail: string
    storeConsume: boolean
    discount: string
    governmentSubsidy: boolean
    consumeDesc: string
    consumeEnabled: boolean
    parkingType?: string // "free" | "paid"
    parkingScope?: string // "all" | "selected"
    externalLinkType?: string
    externalMiniProgramShortLink?: string
    externalMiniProgramPath?: string
    externalWebUrl?: string
  }>
  serviceLabel?: string
  businessHours?: Array<{ startTime: string; endTime: string }>
  recommend?: number
  sortNo?: number
  status?: number
}

export interface Benefit {
  id: number | string
  title: string
  type?: string
  description?: string
  status?: string | number
}

export interface Product {
  id: number | string
  merchantId: number | string
  merchantName?: string
  merchantType?: string
  contactMobile?: string
  productNo?: string
  productType: string
  productName: string
  subtitle?: string
  coverUrl?: string
  originalPrice?: number
  salePrice?: number
  subsidyAmount?: number
  isGovernmentSubsidy?: number
  stock?: number
  salesCount?: number
  detailText?: string
  benefitDesc?: string
  purchaseNotice?: Record<string, unknown> | string
  validStartTime?: string
  validEndTime?: string
  productImages?: string[] | string
  rightsConfig?: Array<Record<string, unknown>> | string
  auditStatus?: number
  auditRemark?: string
  status?: number
  sortNo?: number
  submitTime?: string
  createdAt?: string
}

export interface ProductPayload {
  merchantId: number | string
  productType: string
  productName: string
  subtitle?: string
  coverUrl?: string
  originalPrice?: number
  salePrice?: number
  subsidyAmount?: number
  stock?: number
  detailText?: string
  benefitDesc?: string
  purchaseNotice?: Record<string, unknown>
  validStartTime?: string
  validEndTime?: string
  productImages?: string[]
  rightsConfig?: Array<Record<string, unknown>>
  status?: number
  sortNo?: number
}

export interface ProductQuery extends PageQuery {
  merchantId?: number | string
  merchantName?: string
  contactMobile?: string
  keyword?: string
  type?: string
  status?: number
  createdStart?: string
  createdEnd?: string
}

export interface Coupon {
  id: number | string
  merchantId: number | string
  merchantName?: string
  couponName: string
  conditionType?: string
  conditionAmount?: number
  couponAmount?: number
  talentLevels?: string
  talentLevelQuantities?: Record<string, number> | string
  validStart?: string
  validEnd?: string
  productScope?: string
  productIds?: Array<number | string>
  products?: Product[]
  productCount?: number
  productName?: string
  storeConsume?: number | boolean
  governmentSubsidy?: number | boolean
  useCount?: number
  status?: number
  createdAt?: string
  updatedAt?: string
}

export interface CouponPayload {
  merchantId: number | string
  couponName: string
  conditionType: string
  conditionAmount?: number
  couponAmount?: number
  talentLevels: string[]
  talentLevelQuantities: Record<string, number>
  validStart?: string
  validEnd?: string
  productScope: string
  productIds: Array<number | string>
  storeConsume?: boolean
  governmentSubsidy?: boolean
  status?: number
}

export interface CouponQuery extends PageQuery {
  merchantId?: number | string
  createdStart?: string
  createdEnd?: string
}

export interface MerchantQuery extends PageQuery {
  recommend?: number
  contactMobile?: string
  createdStart?: string
  createdEnd?: string
}

export interface LegacyProduct {
  id: number | string
  name: string
  merchantName?: string
  price?: number
  stock?: number
  status?: string | number
}

export interface Order {
  id: number | string
  orderNo?: string
  orderType?: string
  talentName?: string
  talentMobile?: string
  talentIdCardNo?: string
  talentLevel?: string
  cardNo?: string
  cardType?: string
  productName?: string
  benefitName?: string
  merchantId?: number | string
  merchantName?: string
  merchantType?: string
  orderAmount?: number
  subsidyAmount?: number
  payAmount?: number
  orderStatus?: number
  verifyStatus?: number
  createdAt?: string
  payTime?: string
  updatedAt?: string
}

export interface OrderQuery extends PageQuery {
  talentId?: number | string
  merchantId?: number | string
  orderType?: string
  talentKeyword?: string
  merchantName?: string
  cardLevel?: string
  hasSubsidy?: number
  familyOrder?: number
  orderStart?: string
  orderEnd?: string
}

export interface RefundRecord {
  id: number | string
  refundNo?: string
  orderNo?: string
  orderType?: string
  talentName?: string
  talentMobile?: string
  talentLevel?: string
  cardNo?: string
  merchantName?: string
  merchantType?: string
  benefitName?: string
  paidAmount?: number
  refundAmount?: number
  refundableAmount?: number
  refundStatus?: number
  refundTime?: string
  operatorName?: string
  orderTime?: string
}

export interface RefundQuery extends PageQuery {
  orderType?: string
  talentKeyword?: string
  merchantName?: string
  cardLevel?: string
  hasSubsidy?: number
  orderStart?: string
  orderEnd?: string
}

export interface VerificationRecord {
  id: number | string
  verifyNo?: string
  orderNo?: string
  orderType?: string
  verifyType?: string
  talentName?: string
  talentMobile?: string
  talentLevel?: string
  cardNo?: string
  merchantName?: string
  merchantType?: string
  benefitName?: string
  verifyAmount?: number
  subsidyAmount?: number
  verifyTime?: string
  status?: string
}

export interface VerificationQuery {
  page?: number
  size?: number
  verifyType?: string
  talentKeyword?: string
  merchantName?: string
  cardLevel?: string
  status?: string
  orderStart?: string
  orderEnd?: string
}

export type ServiceApplicationType =
  | 'MEDICAL_RESERVATION'
  | 'MEDICAL_APPLICATION'
  | 'PARKING_PLATE'
  | 'FUEL_SERVICE'
  | 'SPOUSE_EMPLOYMENT'
  | 'HOTEL_RESERVATION'

export interface ServiceApplication {
  id: number | string
  applicationNo?: string
  applicationType?: ServiceApplicationType
  talentName?: string
  talentMobile?: string
  talentLevel?: string
  cardNo?: string
  merchantName?: string
  hospitalName?: string
  contactMobile?: string
  packageName?: string
  productName?: string
  applicantName?: string
  applicantMobile?: string
  expectedTime?: string
  submittedAt?: string
  submissionType?: string
  plateNo?: string
  parkingLot?: string
  alipayMobile?: string
  spouseName?: string
  spouseMobile?: string
  spouseIdCardNo?: string
  spousePoliticalStatus?: string
  spouseEducation?: string
  spouseSchoolMajor?: string
  spouseWorkUnit?: string
  spouseInInstitution?: string
  spouseWorkExperience?: string
  guestCount?: number
  subsidy?: string
  status?: string
  handledAt?: string
  handlerName?: string
  rejectReason?: string
}

export interface ServiceApplicationQuery {
  page?: number
  size?: number
  applicationType?: ServiceApplicationType
  talentKeyword?: string
  serviceKeyword?: string
  merchantName?: string
  hospitalName?: string
  parkingLot?: string
  cardLevel?: string
  status?: string
  submissionType?: string
  subsidy?: string
  submittedStart?: string
  submittedEnd?: string
}

export interface FamilyCardApplication {
  id: number | string
  applicationNo?: string
  applyNo?: string
  talentId?: number | string
  talentName?: string
  talentMobile?: string
  talentCardNo?: string
  cardLevel?: string
  familyName?: string
  dependentName?: string
  familyMobile?: string
  dependentMobile?: string
  relationship?: string
  relation?: string
  idCardNo?: string
  dependentIdCardNo?: string
  applyTime?: string
  createdAt?: string
  status?: string | number
  statusText?: string
  auditTime?: string
  auditorName?: string
  auditBy?: string | number
  auditRemark?: string
  proofFiles?: string | string[]
  familyTalentId?: number | string
  familyCardId?: number | string
  cardId?: number | string
  cardNo?: string
  issueTime?: string
  validStart?: string
  validEnd?: string
  contactAddress?: string
  workAddress?: string
  gender?: number | string
  talentIdCardNo?: string
  currentFamilyCardCount?: number
  familyCardLimit?: number
}

export interface FamilyCardQuery {
  page?: number
  size?: number
  familyKeyword?: string
  talentKeyword?: string
  cardLevel?: string
  status?: string | number
  applyStart?: string
  applyEnd?: string
  management?: boolean
}

export interface ChildCardApplication {
  id: number | string
  childName?: string
  gender?: string | number
  birthDate?: string
  talentName?: string
  talentIdCardNo?: string
  talentGender?: string | number
  talentMobile?: string
  talentCardNo?: string
  cardLevel?: string
  registerTime?: string
  applyTime?: string
  status?: string | number
  rejectReason?: string
  contactAddress?: string
  workAddress?: string
  images?: string[] | string
}

export interface ChildCardQuery {
  page?: number
  size?: number
  childKeyword?: string
  talentKeyword?: string
  cardLevel?: string
  status?: string | number
  applyStart?: string
  applyEnd?: string
}

export interface UpgradeApplication {
  id: number | string
  applicationNo?: string
  talentId?: number | string
  talentName?: string
  talentMobile?: string
  talentIdCardNo?: string
  contactAddress?: string
  workAddress?: string
  gender?: number | string
  talentCardNo?: string
  currentLevel?: string
  targetLevel?: string
  applyReason?: string
  applyTime?: string
  status?: string
  auditTime?: string
  auditorName?: string
  auditRemark?: string
  honors?: UpgradeApplicationHonor[]
}

export interface UpgradeApplicationHonor {
  id?: number | string
  honorName?: string
  obtainedDate?: string
  proofFileId?: number | string
  proofUrl?: string
  proofFileUrl?: string
  sortNo?: number
}

export interface UpgradeApplicationQuery {
  page?: number
  size?: number
  keyword?: string
  targetLevel?: string
  status?: string
  applyStart?: string
  applyEnd?: string
}

export interface EquityImageItem {
  id?: number | string
  name?: string
  imageUrl?: string
  sortNo?: number
  enabled?: boolean | number
}

export interface EquityImageCategory {
  categoryKey: string
  categoryLabel: string
  intro?: string
  images: EquityImageItem[]
}

export interface MovieTicketRule {
  id?: number | string
  level: string
  enabled?: boolean | number
  claimableCount?: number | string
  resetCycle?: string
}

export interface MovieTicketRecord {
  id: number | string
  receiveNo?: string
  packageName?: string
  merchants?: string
  talentName?: string
  talentMobile?: string
  talentLevel?: string
  cardNo?: string
  receivedAt?: string
}

export interface MovieTicketRecordQuery {
  page?: number
  size?: number
  talentKeyword?: string
  cardLevel?: string
  receivedStart?: string
  receivedEnd?: string
}



