export type ListingSource =
  | "Bruno Fritsch"
  | "Clicar"
  | "Chileautos"
  | "Yapo"
  | "Maritano"
  | "Salfa"
  | "Salazar Israel"
  | "Portillo Sur"
  | "Sergio Escobar"

export interface ListingCard {
  id: string
  source: ListingSource
  externalId: string
  sourceUrl: string
  title: string
  normalizedLabel: string
  comparisonKey: string
  make: string
  model: string
  version?: string
  year: number
  priceClp: number
  mileageKm?: number
  transmission: string
  fuel: string
  region: string
  commune?: string
  seller: string
  sellerType: "automotora" | "marketplace" | "particular"
  comparisonBucket: "exacta" | "cercana" | "destacada"
  priceDeltaLast30d?: number
  imageUrl?: string
}

export interface ListingFilterState {
  q: string
  source: string
  make: string
  transmission: string
  fuel: string
  minYear: string
  maxYear: string
  maxPrice: number | null
}

export interface ListingFilterFacets {
  sources: ListingSource[]
  makes: string[]
  transmissions: string[]
  fuels: string[]
  years: number[]
  maxPrice: number
}

export interface SearchResponse {
  total: number
  page: number
  pageSize: number
  totalPages: number
  medianPrice: number
  cheapest: number
  items: ListingCard[]
  facets: ListingFilterFacets
}

export interface FeaturedResponse {
  total: number
  page: number
  pageSize: number
  totalPages: number
  items: ListingCard[]
}

export interface ComparisonDetail extends ListingCard {
  priceGapVsTarget: number
  isTarget: boolean
}

export interface ComparisonResponse {
  target: ListingCard
  exactMatches: ComparisonDetail[]
  relatedMatches: ComparisonDetail[]
  exactCount: number
  relatedCount: number
  cheapestPrice: number
  highestPrice: number
  spreadPrice: number
}
