package com.laseroptek.raman.utils.ext

// 각 단계 (0 .. N-1) 에 따른 해당 각도를 얻는다 (각도는 0도 ~ 270도를 기준으로 함)
// - 예) 0단계 = 15도, 1단계 = 30도, ..
// steps: 총 단계 수 (예: 12단계: 0  ~ 11 단계)
fun Int.stepToDegree(totalSteps: Int, maxDegree: Float = 270f): Float {
    if (totalSteps < 2) {
        return 0f
    }

    val oneStepDegree = maxDegree / (totalSteps - 1)
    val degree = this * oneStepDegree

    //Timber.d("degree: ${degree} - (this(step): ${this}, totalSteps: ${totalSteps})")

    return degree
}

// 해당 각도에 대한 단계 size에 대한 index(0 .. size-1)값을 얻는다. (각도는 0도 ~ 270도를 기준으로 함)
// - (예: 0도 ~ 14.9도: 1단계, 15도 ~ 29.9도: 2단계)
// steps: 총 단계 수
fun Float.degreeToStep(totalSteps: Int, maxDegree: Float = 270f): Int {
    if (totalSteps < 2) {
        return 0
    }

    val oneStepDegree = maxDegree / (totalSteps - 1)
    val halfDegree = oneStepDegree / 2

    val intStep = (this / oneStepDegree).toInt()
    val remainedDegree = this - intStep * oneStepDegree

    val step = if (remainedDegree >= halfDegree)
        intStep + 1
    else
        intStep

    //Timber.d("degreeToStep-> degree: ${this}, totalSteps: ${totalSteps}")
    //Timber.d("degreeToStep-> intStep: ${intStep}, remainedDegree: ${remainedDegree}, halfDegree: ${halfDegree}")
    //Timber.d("degreeToStep-> step: ${step}")

    return step
}