"use client";

import { useQuery } from "@tanstack/react-query";

import { apiFetch } from "@/lib/api";
import type { components } from "@/lib/api-types";

// Reuse generated OpenAPI types (api-types.ts) — НЕ дублировать руками.
export type UtilityInfrastructureResponse =
  components["schemas"]["UtilityInfrastructureResponse"];
export type UtilityInfrastructureFeature =
  components["schemas"]["UtilityInfrastructureFeature"];
export type UtilityInfrastructureSummary =
  components["schemas"]["UtilityInfrastructureSummary"];

/**
 * #1961 — единый радиус «зоны охвата» для раздела «Сети». Таблица utilities
 * (osm_noise_sources_ekb) считает «В 2 км», а карта-слой раньше тянула только
 * 500 м → внутри 500 м был 1 объект, а в 2 км — 153, и пользователь не видел
 * на карте то, что показывала таблица. Делаем радиус карты = радиус таблицы.
 * Бэкенд допускает 50..2000 м (ST_DWithin geography по ЕКБ на 2 км ок по перф).
 */
export const UTILITY_COVERAGE_RADIUS_M = 2000;

/**
 * Слой инженерной инфраструктуры из OSM (#1746). Источник — open-data таблица
 * osm_utility_infrastructure_ekb (weekly-sync). Большинство объектов — ЛЭП
 * (power=line, LineString) и подстанции; точечных узлов (towers) меньше.
 *
 * Зеркалит useConnectionPoints, но с параметром radius_m (бэкенд: 50..2000).
 * #1961 — дефолт повышен до UTILITY_COVERAGE_RADIUS_M (2 км), чтобы охват карты
 * совпадал с таблицей «В 2 км». Сервер — единственный источник истины по форме
 * ответа (см. UtilityInfrastructureResponse в api-types.ts).
 */
export function useUtilityInfrastructure(
  cadNum: string | null | undefined,
  radiusM: number = UTILITY_COVERAGE_RADIUS_M,
  enabled = true,
) {
  return useQuery<UtilityInfrastructureResponse>({
    queryKey: ["utility-infrastructure", cadNum, radiusM],
    queryFn: () =>
      apiFetch<UtilityInfrastructureResponse>(
        `/api/v1/parcels/${encodeURIComponent(cadNum!)}/utility-infrastructure?radius_m=${radiusM}`,
      ),
    enabled: !!cadNum && enabled,
    staleTime: 5 * 60 * 1000,
  });
}
