package space.nstart.pcp_tgu_service.entity

/** JPA-сущность, хранящая текущий подтверждённый базовый план для КА. */
import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.Id
import jakarta.persistence.Table
import java.time.LocalDateTime
import java.util.UUID
import space.nstart.pcp.pcp_types_lib.utils.UtcDateTimes

@Entity
@Table(name = "spacecraft_planning_state")
class SpacecraftPlanningStateEntity(
    @Id
    @Column(name = "spacecraft_id", nullable = false, updatable = false)
    var spacecraftId: String,

    @Column(name = "current_base_plan_id")
    var currentBasePlanId: UUID? = null,

    @Column(name = "active_plan_id")
    var activePlanId: UUID? = null,

    @Column(name = "active_attempt_id")
    var activeAttemptId: UUID? = null,

    @Column(name = "chain_version", nullable = false)
    var chainVersion: Long = 0,

    /**
     * Если задано — ближайшую ЗРВ со стартом не раньше этого времени нужно выдать срочно
     * (после REJECTED / «не заложен» / «не принят»), не дожидаясь обычного issue_not_before.
     */
    @Column(name = "urgent_reissue_from")
    var urgentReissueFrom: LocalDateTime? = null,

    /**
     * Цепочка стоит на паузе после REJECTED: проекция пуста, воркер не выдаёт. Снимается при ручной
     * выдаче / промоуте черновика / приёмке — то есть когда оператор осознанно вмешался.
     */
    @Column(name = "paused_after_reject", nullable = false)
    var pausedAfterReject: Boolean = false,

    @Column(name = "updated_at", nullable = false)
    var updatedAt: LocalDateTime = UtcDateTimes.now()
) {
    /** Создаёт пустой экземпляр сущности, необходимый для JPA. */
    constructor() : this(spacecraftId = "")
}
