package space.nstart.pcp.pcp_types_lib.dto.satellite.mission

/**
 * Скорости накопления/сброса данных для оценки объёма режима.
 *
 * Объём (`volumeMb`) считается единообразно во всех сервисах в **мегабайтах (Мбайт)** как
 * `скорость × длительность`, поэтому константы живут в общей библиотеке типов — один источник
 * правды для текущего плана (pcp-ui-service), редактора и комплексного плана (pcp-tgu-ops-ui).
 *
 * Внимание на единицы: съёмка задана в Мбайт/с, а скорость канала сброса — в Мбит/с,
 * поэтому при расчёте объёма сброса скорость приводится к Мбайт делением на 8.
 */
object ModeDataRates {
    /**
     * Накопление при съёмке — единое для всех КА, **Мбайт/с**.
     * Из расчёта 100 с маршрута = 12 ГБ (1 ГБ = 1000 Мбайт): 12000 Мбайт / 100 с = 120 Мбайт/с.
     */
    const val SURVEY_MBYTE_PER_SEC: Double = 120.0

    /** Сброс — постоянная скорость канала, **Мбит/с**. */
    const val DROP_MBIT_PER_SEC: Double = 1200.0

    /** Бит в байте — приведение скорости канала (Мбит/с) к объёму памяти (Мбайт). */
    private const val BITS_PER_BYTE: Double = 8.0

    /** Объём маршрута съёмки, Мбайт, по его длительности (секунды). */
    fun surveyVolumeMb(durationSeconds: Double): Double = durationSeconds * SURVEY_MBYTE_PER_SEC

    /** Объём сброса, Мбайт, по длительности сеанса (секунды): скорость канала Мбит/с → Мбайт. */
    fun dropVolumeMb(durationSeconds: Double): Double = durationSeconds * DROP_MBIT_PER_SEC / BITS_PER_BYTE
}
