package dev.ulfrx.recipe.shared.domain.model

import kotlin.jvm.JvmInline
import kotlinx.serialization.Serializable

// Typed id wrappers. `@Serializable @JvmInline value class` serializes as the
// underlying string in JSON (no `{"raw":"..."}` envelope) and erases to a
// String at runtime on JVM/Native — zero wire-format change, zero overhead,
// full compile-time protection against passing a RecipeId where an
// IngredientId is expected.

@Serializable
@JvmInline
public value class HouseholdId(public val raw: String)

@Serializable
@JvmInline
public value class UserId(public val raw: String)

@Serializable
@JvmInline
public value class RecipeId(public val raw: String)

@Serializable
@JvmInline
public value class IngredientId(public val raw: String)

@Serializable
@JvmInline
public value class ProductId(public val raw: String)

@Serializable
@JvmInline
public value class PlanEntryId(public val raw: String)

@Serializable
@JvmInline
public value class PantryItemId(public val raw: String)

@Serializable
@JvmInline
public value class ShoppingListId(public val raw: String)

@Serializable
@JvmInline
public value class ShoppingItemId(public val raw: String)

@Serializable
@JvmInline
public value class IngredientCategoryId(public val raw: String)

@Serializable
@JvmInline
public value class MealSlotId(public val raw: String)
