package space.nstart.pcp.pcp_request_service.service

import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.ObjectProvider
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Service
import org.springframework.web.reactive.function.client.WebClient
import space.nstart.pcp.pcp_types_lib.dto.ballistics.StationDTO

/**
 * Клиент к pcp-stations-service: получение списка наземных станций приёма.
 *
 * Расчёт зон радиовидимости (ЗРВ) ведётся по реальным станциям, поэтому баллистика
 * сама забирает их каталог у сервиса станций (а не получает с фронта).
 */
@Service
class StationCatalogClient(webClientBuilderProvider: ObjectProvider<WebClient.Builder>) {
    private val webClientBuilder: WebClient.Builder = webClientBuilderProvider.ifAvailable ?: WebClient.builder()
    private val logger: Logger = LoggerFactory.getLogger(this::class.java)

    @Value("\${settings.stations-service:stations-service}")
    val url = ""

    /** Возвращает все зарегистрированные станции; при ошибке — пустой список (ЗРВ тогда не строится). */
    fun allStations(): List<StationDTO> =
        runCatching {
            webClientBuilder.build()
                .get()
                .uri("$url/api/stations")
                .retrieve()
                .bodyToFlux(StationDTO::class.java)
                .collectList()
                .block()
                ?: emptyList()
        }.getOrElse { e ->
            logger.error("Не удалось получить список станций из $url/api/stations: ${e.message}")
            emptyList()
        }
}
