package dev.inmo.micro_utils.pagination.utils

fun <T> Iterable<T>.optionallyReverse(reverse: Boolean): Iterable<T> = when (this) {
    is List<T> -> optionallyReverse(reverse)
    is Set<T> -> optionallyReverse(reverse)
    else -> if (reverse) {
        reversed()
    } else {
        this
    }
}
fun <T> List<T>.optionallyReverse(reverse: Boolean): List<T> = if (reverse) {
    reversed()
} else {
    this
}
fun <T> Set<T>.optionallyReverse(reverse: Boolean): Set<T> = if (reverse) {
    reversed().toSet()
} else {
    this
}

inline fun <reified T> Array<T>.optionallyReverse(reverse: Boolean) = if (reverse) {
    Array(size) {
        get(lastIndex - it)
    }
} else {
    this
}