// Mock listings + canned conversation responses for the prototype

const LISTINGS = [
  {
    id: "f1",
    name: "2к Тверская",
    price: 18500000,
    area: 54,
    rooms: 2,
    district: "центр",
    address: "Тверская ул., 12",
    building_year: 1952,
    metro_walk_min: 4,
    metro_name: "Тверская",
    lat: 55.7651,
    lon: 37.6055,
    distance_km: 0.6,
    parks_nearby: 3,
    schools_nearby: 4,
    image_hue: 24,
  },
  {
    id: "f2",
    name: "2к Чистые пруды",
    price: 19800000,
    area: 58,
    rooms: 2,
    district: "центр",
    address: "Покровка, 27",
    building_year: 1928,
    metro_walk_min: 6,
    metro_name: "Чистые пруды",
    lat: 55.7625,
    lon: 37.6395,
    distance_km: 1.4,
    parks_nearby: 2,
    schools_nearby: 5,
    image_hue: 14,
  },
  {
    id: "f3",
    name: "2к Парк Горького",
    price: 17200000,
    area: 51,
    rooms: 2,
    district: "центр",
    address: "Ленинский просп., 8",
    building_year: 1965,
    metro_walk_min: 8,
    metro_name: "Октябрьская",
    lat: 55.7298,
    lon: 37.6019,
    distance_km: 2.1,
    parks_nearby: 5,
    schools_nearby: 3,
    image_hue: 32,
  },
  {
    id: "f4",
    name: "2к Сокольники",
    price: 14900000,
    area: 49,
    rooms: 2,
    district: "север",
    address: "ул. Стромынка, 19",
    building_year: 1971,
    metro_walk_min: 5,
    metro_name: "Сокольники",
    lat: 55.7889,
    lon: 37.6797,
    distance_km: 5.8,
    parks_nearby: 6,
    schools_nearby: 4,
    image_hue: 18,
  },
];

// Canned scripted "agent" responses, keyed by recognized user input.
// Order matters — first match wins.
const SCRIPTED_REPLIES = [
  {
    match: /(20\s*млн|двадцати).*парк|парк.*(20\s*млн|двадцати)/i,
    delay: 1400,
    trace: [
      { name: "geocode_place", args: { query: "парк горького" }, ms: 320 },
      { name: "search_listings", args: { rooms_min: 2, budget_max: 20000000 }, ms: 480 },
      { name: "count_pois_near", args: { listing_id: "f1", kind: "park" }, ms: 220 },
      { name: "count_pois_near", args: { listing_id: "f3", kind: "park" }, ms: 220 },
    ],
    response:
      "Нашёл **3 варианта** до 20 млн ₽ с парком в шаговой доступности. Сортировка — по близости к зелёной зоне:\n\n1. **2к Парк Горького** — 17,2 млн ₽, **5 парков** рядом, до Парка Горького 600 м пешком.\n2. **2к Тверская** — 18,5 млн ₽, 3 парка в радиусе 1 км (Патриаршие, Александровский сад).\n3. **2к Чистые пруды** — 19,8 млн ₽, 2 парка (Чистопрудный б-р, сад Эрмитаж).\n\nПодсказать, как добираться от любой из них до работы?",
    listings: ["f3", "f1", "f2"],
  },
  {
    match: /15\s*млн|пятнадцати/i,
    delay: 1100,
    trace: [
      { name: "search_listings", args: { rooms_min: 2, budget_max: 15000000 }, ms: 420 },
    ],
    response:
      "В пределах **15 млн ₽** двушек немного. Вот единственная, которая прошла фильтр:\n\n1. **2к Сокольники** — 14,9 млн ₽, 49 м², 5 минут до метро, рядом парк Сокольники.\n\nЕсли расширим бюджет до 18 млн — найдётся ещё 2 варианта в центре. Расширить?",
    listings: ["f4"],
  },
  {
    match: /запад/i,
    delay: 900,
    trace: [
      { name: "search_listings", args: { district: "запад" }, ms: 380 },
    ],
    response:
      "На **западе Москвы** в каталоге сейчас пусто — мы покрываем в основном центр и север. Могу показать варианты на западной части центра (Арбат, Хамовники)?",
    listings: [],
  },
  {
    match: /кремл/i,
    delay: 1200,
    trace: [
      { name: "geocode_place", args: { query: "кремль" }, ms: 290 },
      { name: "search_radius", args: { center: [55.752, 37.617], radius_km: 5 }, ms: 510 },
    ],
    response:
      "В радиусе **5 км от Кремля** — 3 варианта:\n\n1. **2к Тверская** — 0,6 км, 18,5 млн ₽\n2. **2к Чистые пруды** — 1,4 км, 19,8 млн ₽\n3. **2к Парк Горького** — 2,1 км, 17,2 млн ₽\n\nВсе в пешей доступности от метро.",
    listings: ["f1", "f2", "f3"],
  },
  {
    match: /мгу/i,
    delay: 1500,
    trace: [
      { name: "geocode_place", args: { query: "МГУ" }, ms: 280 },
      { name: "search_listings", args: { rooms_min: 2, budget_max: 20000000 }, ms: 460 },
      { name: "travel_time", args: { from: "f3", to: "МГУ", mode: "transit" }, ms: 340 },
      { name: "travel_time", args: { from: "f1", to: "МГУ", mode: "transit" }, ms: 340 },
    ],
    response:
      "До **МГУ за 30 минут** на общественном транспорте укладываются:\n\n1. **2к Парк Горького** — 22 мин (метро Октябрьская → Университет), 17,2 млн ₽\n2. **2к Тверская** — 28 мин (с пересадкой), 18,5 млн ₽\n\nХочешь добавить пешие маршруты или велосипед?",
    listings: ["f3", "f1"],
  },
  {
    match: /парк.*f1|f1.*парк/i,
    delay: 700,
    trace: [
      { name: "count_pois_near", args: { listing_id: "f1", kind: "park", radius_m: 1000 }, ms: 240 },
    ],
    response:
      "Рядом с **f1 (2к Тверская)** в радиусе 1 км — **3 парка**:\n\n- Александровский сад (550 м)\n- Сад Эрмитаж (820 м)\n- Патриаршие пруды (940 м)\n\nВсе в пешей доступности.",
    listings: ["f1"],
  },
  {
    match: /подробнее.*f3|f3.*подробнее|расскажи.*f3/i,
    delay: 900,
    trace: [
      { name: "get_listing", args: { id: "f3" }, ms: 180 },
      { name: "count_pois_near", args: { listing_id: "f3", kind: "park" }, ms: 200 },
      { name: "count_pois_near", args: { listing_id: "f3", kind: "school" }, ms: 200 },
      { name: "count_pois_near", args: { listing_id: "f3", kind: "metro" }, ms: 180 },
    ],
    response: "__DETAIL__f3",
    listings: ["f3"],
  },
];

const FALLBACK_REPLY = {
  delay: 800,
  trace: [{ name: "search_listings", args: {}, ms: 280 }],
  response:
    "Покажу **что есть в каталоге** — 4 двушки в Москве, цена 14,9–19,8 млн ₽. Уточни район, бюджет или ориентир (например, «в 5 км от Кремля»), и я отфильтрую.",
  listings: ["f1", "f2", "f3", "f4"],
};

const QUICK_PROMPTS = [
  "Найди 2-комнатную до 15 млн рублей",
  "Что есть на западе Москвы?",
  "Квартиры в 5 км от Кремля",
  "2-комнатная до 20 млн в 30 минутах от МГУ",
  "Сколько парков рядом с f1?",
  "Покажи всё, что есть в каталоге",
];

Object.assign(window, { LISTINGS, SCRIPTED_REPLIES, FALLBACK_REPLY, QUICK_PROMPTS });
