package space.nstart.pcp_tgu_service.controller

/** Содержит методы API для чтения текущих планов. */
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import reactor.core.publisher.Mono
import reactor.core.scheduler.Schedulers
import space.nstart.pcp_tgu_service.dto.PlanResponse
import space.nstart.pcp_tgu_service.service.PlanQueryService

@RestController
@RequestMapping("/api/plans")
class PlanController(
    private val planQueryService: PlanQueryService
) {

    /** Возвращает планы по всем КА (persisted ∪ проекция будущего) с окном истории. */
    @GetMapping
    fun getAllPlans(@RequestParam(defaultValue = "7") historyDays: Long): Mono<List<PlanResponse>> =
        Mono.fromCallable {
            planQueryService.getAllPlans(historyDays)
        }.subscribeOn(Schedulers.boundedElastic())

    /** Возвращает цепочку планов для одного КА (persisted ∪ проекция будущего). */
    @GetMapping("/{spacecraftId}")
    fun getPlansBySpacecraftId(
        @PathVariable spacecraftId: String,
        @RequestParam(defaultValue = "7") historyDays: Long
    ): Mono<List<PlanResponse>> =
        Mono.fromCallable {
            planQueryService.getPlansBySpacecraftId(spacecraftId, historyDays)
        }.subscribeOn(Schedulers.boundedElastic())
}
