package net.axay.kspigot.utils

import com.google.common.base.Enums
import org.bukkit.Location
import org.bukkit.block.BlockFace

/**
 * This enum class is useful for determining
 * vertical directions (pitch).
 */
enum class VerticalDirection {

    UP, DOWN, STRAIGHT;

    val facing: BlockFace?
        get() = Enums.getIfPresent(BlockFace::class.java, this.name).orNull()

    companion object {

        fun fromLocation(location: Location): VerticalDirection {
            val pitch: Float = location.pitch
            return when {
                pitch <= -45 -> DOWN
                pitch >= 45 -> UP
                else -> STRAIGHT
            }
        }

    }

}

/**
 * This enum class is useful for determining
 * cardinal directions (yaw).
 */
enum class CardinalDirection {

    NORTH, EAST, SOUTH, WEST;

    val facing: BlockFace?
        get() = Enums.getIfPresent(BlockFace::class.java, this.name).orNull()

    companion object {

        fun fromLocation(location: Location): CardinalDirection {
            var yaw: Float = location.yaw
            if (yaw < 0) yaw += 360f
            return when {
                yaw >= 315 || yaw < 45 -> SOUTH
                yaw < 135 -> WEST
                yaw < 225 -> NORTH
                yaw < 315 -> EAST
                else -> NORTH
            }
        }

    }

}