import type { ResultType } from './enums'
import type { Property } from './property'
import type { FutureSignal } from './futureSignal'
import type { Match } from './match'

// ── Unified Match Result (discriminated union) ────────────────────────────────
// Wraps the three result types so UI components can handle all three paths
// without type confusion. Discriminate on `resultType`.

interface UnifiedResultBase {
  matchId: string
  needId: string
  matchScore: number
  resultType: ResultType
}

export interface VerifiedPortfolioResult extends UnifiedResultBase {
  resultType: 'VERIFIED_PORTFOLIO'
  property: Property
  match: Match
}

export interface ExternalMarketResult extends UnifiedResultBase {
  resultType: 'EXTERNAL_MARKET'
  property: Property
  match: Match
}

export interface FutureAvailabilityResult extends UnifiedResultBase {
  resultType: 'FUTURE_AVAILABILITY'
  signal: FutureSignal
  match: Match
}

export type UnifiedMatchResult =
  | VerifiedPortfolioResult
  | ExternalMarketResult
  | FutureAvailabilityResult
