package net.mezimmah.wkt9.keypad import android.util.Log import net.mezimmah.wkt9.exception.MissingLetterCode import java.lang.StringBuilder class Keypad( private val keyCodeMapping: KeyCodeMapping, private val letterLayout: Map>, numericLayout: Map ) { private val tag = "WKT9" private val letterCodeMap: MutableMap = mutableMapOf() init { Log.d(tag, "Keypad") numericLayout.forEach { (key, code) -> indexKeyLetters(key, code) } } private fun indexKeyLetters(key: Key, code: Int) { letterLayout[key]?.map { letter -> letterCodeMap[letter] = code } } fun getKey(code: Int): Key? { return keyCodeMapping.key(code) } fun getCodeForWord(word: String): String { val builder = StringBuilder() val normalized = word.lowercase() for (letter in normalized) { val code = codeForLetter(letter) ?: throw MissingLetterCode("No code found for '$letter'") builder.append(code) } return builder.toString() } fun codeForLetter(letter: Char): Int? { return letterCodeMap[letter] } }