package de.arxsilex.maptools.converter.core

enum class MapsforgeProcessorType(val cliValue: String) {
    RAM("ram"),
    HD("hd");

    companion object {
        fun fromCliValue(value: String): MapsforgeProcessorType = entries.singleOrNull {
            it.cliValue == value.lowercase()
        } ?: error("Unbekannter Mapsforge-Prozessortyp: $value")
    }
}

object MapsforgeProcessorPolicy {
    const val MAX_RAM_INPUT_BYTES = 256L * 1024L * 1024L

    fun select(inputBytes: Long, preferDiskProcessor: Boolean): MapsforgeProcessorType {
        require(inputBytes >= 0L) { "Die Eingabegröße darf nicht negativ sein." }
        return if (preferDiskProcessor || inputBytes > MAX_RAM_INPUT_BYTES) {
            MapsforgeProcessorType.HD
        } else {
            MapsforgeProcessorType.RAM
        }
    }
}
