package space.nstart.pcp.complan.types

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

@Schema(description = "Заявка для расчета комплексного плана")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize
data class RequestItemDTO(
    @get:JsonProperty("id")
    @param:JsonProperty("id")
    val id : UUID = UUID.randomUUID(),

    @get:JsonProperty("name")
    @param:JsonProperty("name")
    val name : String,

    @get:JsonProperty("originalGeometry")
    @param:JsonProperty("originalGeometry")
    @param:JsonAlias("geometry", "remainingGeometry")
    val geometry : String,

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

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

    @get:JsonProperty("resolution")
    @param:JsonProperty("resolution")
    val resolution : Double,

    @get:JsonProperty("priority")
    @param:JsonProperty("priority")
    val priority : Int? = null,

    @get:JsonProperty("importance")
    @param:JsonProperty("importance")
    val importance : Double,

    /**Исходная площадь района.
     * Используется для расчета важности задания */
    @get:JsonProperty("baseArea")
    @param:JsonProperty("baseArea")
    var baseArea : Double? = null,

    /**Текущая площадь района.
     * Используется для расчета важности задания */
    @get:JsonProperty("currentArea")
    @param:JsonProperty("currentArea")
    var currentArea : Double? = null,

    /**Дата время последнего наблюдения.
     * Используется для расчета важности задания */
    @get:JsonProperty("dateTimeLastObservation")
    @param:JsonProperty("dateTimeLastObservation")
    var dateTimeLastObservation : LocalDateTime? = null,

    @get:JsonProperty("appType")
    @param:JsonProperty("appType")
    val appType : Int = 0,

    @get:JsonProperty("intervals")
    @param:JsonProperty("intervals")
    val intervals : MutableList<IntervalItemDTO>? = null,
)
