package space.nstart.pcp.slots_service.dto.tgu

import java.time.Instant
import java.time.LocalDateTime
import java.util.UUID

/*
 * Времена плана ([TguPlanResponse]) — naive `LocalDateTime` без зоны (как отдаёт pcp-tgu-service).
 * `Instant` ([TguPlatformResponse.validFrom/validTo]) — с `Z` (как отдаёт НСИ-прокси).
 */

data class TguPlatformResponse(
    val id: String?,
    val businessKey: String?,
    val name: String?,
    val status: String?,
    val noradId: Long?,
    val mission: String?,
    val validFrom: Instant?,
    val validTo: Instant?
)

data class TguPlanResponse(
    val planId: UUID,
    val spacecraftId: String,
    val startTime: LocalDateTime,
    val endTime: LocalDateTime,
    val kppId: String,
    val status: String,
    /** Предшественник в цепочке (`null` — старт без предыстории). Проксируется из pcp-tgu-service. */
    val basePlanId: UUID? = null,
    /** `true` — проекция будущего (не persisted). Проксируется из pcp-tgu-service. */
    val projected: Boolean = false,
    /** Время «снятия с учёта» (`null` — план на учёте). Проксируется из pcp-tgu-service. */
    val dismissedAt: LocalDateTime? = null
)

enum class TguPlanDecision {
    ACCEPTED,
    REJECTED
}

data class TguPlanDecisionMessage(
    val eventId: UUID,
    val spacecraftId: String,
    val planId: UUID,
    val attemptId: UUID,
    val decision: TguPlanDecision,
    val decisionTime: LocalDateTime,
    val reason: String?
)
