package space.nstart.pcp.complan.types

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
import io.swagger.v3.oas.annotations.media.Schema
import java.time.LocalDateTime
import java.util.UUID

@Schema(description = "Debug-запрос построения маршрутов по всем параметрам видимости из файла")
data class TestCalcMarsDebugRequestDTO(
    @get:JsonProperty("requestId")
    @param:JsonProperty("requestId")
    val requestId: UUID,

    @get:JsonProperty("satelliteIds")
    @param:JsonProperty("satelliteIds")
    val satelliteIds: List<Long>,

    @get:JsonProperty("calculationStart")
    @param:JsonProperty("calculationStart")
    val calculationStart: LocalDateTime,

    @get:JsonProperty("calculationEnd")
    @param:JsonProperty("calculationEnd")
    val calculationEnd: LocalDateTime
)

@Schema(description = "Debug-результат построения маршрутов по всем параметрам видимости из файла")
@JsonIgnoreProperties(ignoreUnknown = true)
data class TestCalcMarsDebugResultDTO(
    @get:JsonProperty("requestId")
    @param:JsonProperty("requestId")
    val requestId: UUID,

    @get:JsonProperty("satelliteIds")
    @param:JsonProperty("satelliteIds")
    val satelliteIds: List<Long>,

    @get:JsonProperty("missingSatelliteIds")
    @param:JsonProperty("missingSatelliteIds")
    val missingSatelliteIds: List<Long>,

    @get:JsonProperty("calculationStart")
    @param:JsonProperty("calculationStart")
    val calculationStart: LocalDateTime,

    @get:JsonProperty("calculationEnd")
    @param:JsonProperty("calculationEnd")
    val calculationEnd: LocalDateTime,

    @get:JsonProperty("status")
    @param:JsonProperty("status")
    val status: ComplexPlanCalculationStatus,

    @get:JsonProperty("observationParametersFilePath")
    @param:JsonProperty("observationParametersFilePath")
    val observationParametersFilePath: String? = null,

    @get:JsonProperty("intervalsCount")
    @param:JsonProperty("intervalsCount")
    val intervalsCount: Int,

    @get:JsonProperty("observationParametersCount")
    @param:JsonProperty("observationParametersCount")
    val observationParametersCount: Int,

    @get:JsonProperty("routeBuildAttemptsCount")
    @param:JsonProperty("routeBuildAttemptsCount")
    val routeBuildAttemptsCount: Int,

    @get:JsonProperty("routesCount")
    @param:JsonProperty("routesCount")
    val routesCount: Int,

    @get:JsonProperty("routeBuildFailuresCount")
    @param:JsonProperty("routeBuildFailuresCount")
    val routeBuildFailuresCount: Int,

    @get:JsonProperty("routeBuildMs")
    @param:JsonProperty("routeBuildMs")
    val routeBuildMs: Long,

    @get:JsonProperty("totalMs")
    @param:JsonProperty("totalMs")
    val totalMs: Long
)
