package ballistics.types

/**
 * Код завершения расчета
 */
enum class BallisticsError(val value: Int) {
    OK(0),
    UNKNOWN_ERR(1),

    EMPTY_NU(3),
    H_MINIMUM_ERROR(4),
    EMPTY_ORBITAL_POINTS(5),
    EMPTY_FLIGHTLINE_POINTS(6),
    ORB_POINTS_INTERVAL_ERROR(7),
    STEPPER_ERROR(8),

    EMPTY_PPI_LIST(9),
    ;

    companion object {
        val map = BallisticsError.values().associate { it.value to it }

        fun fromInt(
            value: Int,
            defValue: BallisticsError = BallisticsError.OK,
        ): BallisticsError {
            return map[value] ?: defValue
        }
    }
}

fun printError(err: BallisticsError): String {
    return when (err) {
        BallisticsError.OK -> "Успешно"
        BallisticsError.UNKNOWN_ERR -> "нераспознанная ошибка"
        BallisticsError.H_MINIMUM_ERROR -> "высота достигла минимального значения"
        BallisticsError.EMPTY_NU -> "пустой массив начальных условий"
        BallisticsError.EMPTY_ORBITAL_POINTS -> "не рассчитаны точки орбиты"
        BallisticsError.ORB_POINTS_INTERVAL_ERROR -> "интервал расчета не пренадлежит интервалу расчета точек орбиты"
        BallisticsError.EMPTY_PPI_LIST -> "пустой массив ППИ"
        BallisticsError.STEPPER_ERROR -> "ошибка при выходе на заданное время"
        else -> "неизвестный код ошибки"
    }
}
