Improve domain (WIP)

This commit is contained in:
2024-06-11 23:41:39 +02:00
parent f891dea885
commit 60204f3b04
6 changed files with 122 additions and 44 deletions

View File

@@ -1,44 +1,105 @@
@file:OptIn(ExperimentalResourceApi::class)
package domain
import org.jetbrains.compose.resources.DrawableResource
import org.jetbrains.compose.resources.ExperimentalResourceApi
enum class Animals(symbol: String) : ItemClass {
ZEBRA("🦓"),
OCTOPUS("🐙"),
GOAT("🐐"),
SLOTH("🦥"),
DOG("🐕"),
SNAIL("🐌"),
ANT("🐜");
fun category(block: CategoryContext.() -> Unit): ItemCategory {
class CategoryImpl(val items: MutableList<ItemImpl>) :
ItemCategory, List<Item> by items {
inner class ItemImpl(
override val image: DrawableResource
) : Item {
override val category: CategoryImpl = this@CategoryImpl
init {
items.add(this)
}
}
}
val ctx = object : CategoryContext {
val category = CategoryImpl(mutableListOf())
override fun item(image: DrawableResource) {
category.ItemImpl(image)
}
}
ctx.block()
return ctx.category
override val symbols: Array<String> = arrayOf(symbol)
}
interface CategoryContext {
fun item(image: DrawableResource)
enum class Nationality(symbol: String) : ItemClass {
ENGLAND("🇬🇧"),
UKRAINE("🇺🇦"),
SPAIN("🇪🇸"),
NORWAY("🇳🇴"),
JAPAN("🇯🇵"),
SWITZERLAND("🇨🇭"),
CANADA("🇨🇦");
override val symbols: Array<String> = arrayOf(symbol)
}
interface Item {
val category: ItemCategory
enum class Drink(symbol: String) : ItemClass {
MILK("🥛"),
WINE("🍷"),
COCKTAIL("🍸"),
COFFEE(""),
TEA("🍵"),
BEER("🍺"),
BEVERAGE("🧃");
@OptIn(ExperimentalResourceApi::class)
val image: DrawableResource
override val symbols: Array<String> = arrayOf(symbol)
}
interface ItemCategory : List<Item>
enum class Profession(symbol: String) : ItemClass {
ASTRONAUT("\u200D\uD83D\uDE80"),
HEALTH_WORKER("\u200D\uFE0F"),
FARMER("\u200D\uD83C\uDF3E"),
ROCK_STAR("\u200D\uD83C\uDFA4"),
SCIENTIST("\u200D\uD83D\uDD2C"),
SOFTWARE_DEV("\u200D\uD83D\uDCBB"),
FIREFIGHTER("\u200D\uD83D\uDE92"),
TEACHER("\u200D\uD83C\uDFEB");
override val symbols: Array<String> = idic(symbol)
}
enum class Fruit(symbol: String) : ItemClass {
GRAPES("🍇"),
WATERMELON("🍉"),
LEMON("🍋"),
BANANA("🍌"),
PINEAPPLE("🍍"),
CHERRIES("🍒"),
STRAWBERRY("🍓"),
KIWI("🥝"),
PEAR("🍐"),
MANGO("🥭");
override val symbols: Array<String> = idic(symbol)
}
enum class Dessert(symbol: String) : ItemClass {
ICE_CREAM("🍨"),
DOUGHNUT("🍩"),
COOKIE("🍪"),
CAKE("🍰"),
CUPCAKE("🧁"),
PIE("🥧"),
CHOCOLATE("🍫"),
LOLLIPOP("🍭"),
CUSTARD("🍮");
override val symbols: Array<String> = idic(symbol)
}
enum class Transportation(symbol: String) : ItemClass {
BICYCLE("🚲"),
MOTOR_SCOOTER("🛵"),
SKATEBOARD("🛹"),
TAXI("🚕"),
LOCOMOTIVE("🚂"),
TRAM_CAR("🚋"),
BUS("🚌");
override val symbols: Array<String> = idic(symbol)
}
private val GENDERS = arrayOf("\uD83E\uDDD1", "\uD83D\uDC68", "\uD83D\uDC69")
private val SKIN_TONES =
arrayOf("\uD83C\uDFFB", "\uD83C\uDFFC", "\uD83C\uDFFD", "\uD83C\uDFFE", "\uD83C\uDFFF")
private fun idic(symbol: String) = Array<String>(GENDERS.size * SKIN_TONES.size) { i ->
val g = GENDERS[i % GENDERS.size]
val t = SKIN_TONES[i / GENDERS.size]
g + t + symbol
}
sealed interface ItemClass {
val symbols: Array<String>
}