import type { ResultType } from './enums'
import type { Property, PropertyUnit } 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' | 'MAISON_WORK'
  property: Property
  match: Match
  unit?: PropertyUnit    // specific unit this match refers to
}

export interface FutureAvailabilityResult extends UnifiedResultBase {
  resultType: 'FUTURE_AVAILABILITY'
  signal: FutureSignal
  match: Match
  property?: Property           // backing property (when signal has a propertyId)
  unit?: PropertyUnit           // specific rentable unit (when signal has a unitId)
}

/** @deprecated Alias kept for backward compatibility — use VerifiedPortfolioResult */
export type ExternalMarketResult = VerifiedPortfolioResult

export type UnifiedMatchResult =
  | VerifiedPortfolioResult
  | FutureAvailabilityResult
