Pith - kiln
package com.vgmlr.kiln

enum class KilnHair(val label: String) {
    BLONDE("Blonde"),
    BROWN("Brown"),
    BLACK("Black"),
    RED("Red"),
    BALD("Bald");

    companion object {
        val LABELS: List<String> = entries.map { it.label }
        fun of(name: String?): KilnHair = entries.firstOrNull { it.name == name } ?: BROWN
        fun ofLabel(label: String): KilnHair = entries.firstOrNull { it.label == label } ?: BROWN
    }
}

object KilnFaces {
    const val HAPPY = 2
    const val DISTRUSTFUL = 3
    const val ANGRY = 4

    private const val ANGRY_MAX = 1
    private const val DISTRUSTFUL_MAX = 3
    private const val ANGRY_HUE = 15f // red ≥50%
    private const val DISTRUSTFUL_HUE = 45f // orange ≥50%

    val LABELS = listOf("Crying", "Uncomfortable", "Happy", "Distrustful", "Angry")

    fun faces(hair: KilnHair): List<Int> = when (hair) {
        KilnHair.BLONDE -> listOf(
            R.drawable.crying_blonde, R.drawable.uncomfortable_blonde, R.drawable.happy_blonde,
            R.drawable.distrustful_blonde, R.drawable.angry_blonde
        )
        KilnHair.BROWN -> listOf(
            R.drawable.crying_brown, R.drawable.uncomfortable_brown, R.drawable.happy_brown,
            R.drawable.distrustful_brown, R.drawable.angry_brown
        )
        KilnHair.BLACK -> listOf(
            R.drawable.crying_black, R.drawable.uncomfortable_black, R.drawable.happy_black,
            R.drawable.distrustful_black, R.drawable.angry_black
        )
        KilnHair.RED -> listOf(
            R.drawable.crying_red, R.drawable.uncomfortable_red, R.drawable.happy_red,
            R.drawable.distrustful_red, R.drawable.angry_red
        )
        KilnHair.BALD -> listOf(
            R.drawable.crying_bald, R.drawable.uncomfortable_bald, R.drawable.happy_bald,
            R.drawable.distrustful_bald, R.drawable.angry_bald
        )
    }

    fun happy(hair: KilnHair): Int = faces(hair)[HAPPY]

    fun forBucket(hair: KilnHair, bucket: Int): Int = faces(hair)[
        when {
            bucket <= ANGRY_MAX -> ANGRY
            bucket <= DISTRUSTFUL_MAX -> DISTRUSTFUL
            else -> HAPPY
        }
    ]

    fun forHue(hair: KilnHair, hue: Float): Int = faces(hair)[
        when {
            hue <= ANGRY_HUE -> ANGRY
            hue <= DISTRUSTFUL_HUE -> DISTRUSTFUL
            else -> HAPPY
        }
    ]
}