package space.nstart.pcp.complan.settings

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

@Schema(description = "Типовые настройки работы автомата планирования")
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonSerialize
data class SettingsDTO(

    @get:JsonProperty("daysCalc")
    @param:JsonProperty("daysCalc")
    val daysCalc: Int = 1,

    @get:JsonProperty("kaList")
    @param:JsonProperty("kaList")
    val kaList: Set<Int> = setOf(1,2,3),

    @get:JsonProperty("marBeginCorrectionTime")
    @param:JsonProperty("marBeginCorrectionTime")
    val marBeginCorrectionTime: Long = 1,

    @get:JsonProperty("marEndCorrectionTime")
    @param:JsonProperty("marEndCorrectionTime")
    val marEndCorrectionTime: Long = 1,

    @get:JsonProperty("marWidth")
    @param:JsonProperty("marWidth")
    val marWidth : Double = 30.0,

    @get:JsonProperty("marOverlap")
    @param:JsonProperty("marOverlap")
    val marOverlap : Double = 1.0,

    @get:JsonProperty("marMaxLength")
    @param:JsonProperty("marMaxLength")
    val marMaxLength : Double = 60.0,

    @get:JsonProperty("marMinLength")
    @param:JsonProperty("marMinLength")
    val marMinLength : Double = 5.0,

    @get:JsonProperty("maxRevTime")
    @param:JsonProperty("maxRevTime")
    val maxRevTime : Double = 300.0,

    @get:JsonProperty("maxDayTime")
    @param:JsonProperty("maxDayTime")
    val maxDayTime : Double = 2100.0,

    @get:JsonProperty("contourStepBuild")
    @param:JsonProperty("contourStepBuild")
    val contourStepBuild : Double = 1.0,

    @get:JsonProperty("filterByRegionUUID")
    @param:JsonProperty("filterByRegionUUID")
    val filterByRegionUUID : Boolean = false,

    @get:JsonProperty("regionList")
    @param:JsonProperty("regionList")
    val regionList : Set<UUID> = setOf(),


    @get:JsonProperty("filterByGamma")
    @param:JsonProperty("filterByGamma")
    val filterByGamma : Boolean = false,

    @get:JsonProperty("gammaValue")
    @param:JsonProperty("gammaValue")
    val gammaValue : Double = 40.0,

    @get:JsonProperty("filterByRevolution")
    @param:JsonProperty("filterByRevolution")
    val filterByRevolution : Boolean = false,

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

)
