// Sale-share — типы страницы «доля квартир дома в продаже».
// Hand-written, зеркалит Pydantic-схемы tradein-mvp/backend/app/schemas/buildings.py.
// (В tradein нет OpenAPI-codegen — типы поддерживаем вручную, как trade-in.ts.)

// Допустимые значения сортировки (бэкенд валидирует тем же паттерном).
export type SaleShareSort =
  | "share_desc"
  | "active_desc"
  | "share_45d_desc"
  | "count_45d_desc"
  | "exposure_desc"
  | "price_asc"
  | "price_desc";

/** Один дом вторичного рынка из v_building_sale_share. */
export interface BuildingSaleShare {
  house_id: number;
  address: string | null;
  lat: number | null;
  lon: number | null;
  // Доля квартир дома, выставленных на вторичную продажу. null, если по дому
  // ещё не загружен реестр квартир (ГАР) → знаменатель неизвестен.
  sale_share_pct: number | null;
  // Те же метрики, но за окно последних 45 дней (доля квартир, которые были
  // в продаже хотя бы раз за 45д, и число таких объявлений). null — нет данных.
  sale_share_pct_45d: number | null;
  listings_45d: number | null;
  // active_secondary > знаменателя — implausible-матч (коллизия адреса при
  // ГАР-матче). Не прячем, а маркируем бейджем «возможно, несколько корпусов».
  over_100: boolean;
  active_secondary: number | null;
  flat_count_effective: number | null;
  gar_match_method: string | null;
  median_price_rub: number | null;
  median_price_per_m2: number | null;
  avg_days_on_market: number | null;
  year_built: number | null;
  house_type: string | null;
  total_floors: number | null;
  series_name: string | null;
  is_emergency: boolean | null;
}

/** Активное вторичное объявление в доме (click-through drawer). */
export interface BuildingListing {
  listing_id: number;
  source: string;
  source_url: string | null;
  price_rub: number | null;
  price_per_m2: number | null;
  rooms: number | null;
  area_m2: number | null;
  floor: number | null;
  total_floors: number | null;
  days_on_market: number | null;
  listing_date: string | null; // ISO date
  address: string | null;
}

/** Корзина гистограммы распределения sale_share_pct. */
export interface HistogramBucket {
  bucket: string;
  count: number;
}

/** Сводка для слайдера % + баннера покрытия. */
export interface SaleShareSummary {
  total_secondary_buildings: number;
  buildings_with_denominator: number;
  coverage_pct: number;
  max_pct: number | null;
  p95_pct: number | null;
  histogram: HistogramBucket[];
}

/** Параметры запроса списка домов (драйвят query-key). */
export interface SaleShareQuery {
  min_pct: number;
  max_pct?: number | null;
  city?: string | null;
  price_min?: number | null;
  price_max?: number | null;
  year_min?: number | null;
  year_max?: number | null;
  house_type?: string | null;
  sort: SaleShareSort;
  limit?: number;
}
