package com.tiedup.remake.v2.furniture;

import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.Nullable;

/**
 * Sound events for furniture interactions. All fields are optional
 * -- null means "use the default sound" at runtime.
 *
 * <p>Loaded from the {@code "feedback"} block of a furniture JSON definition.
 * When the entire block is absent, {@link #EMPTY} is used.</p>
 */
public record FurnitureFeedback(
    /** Sound played when a player mounts the furniture. */
    @Nullable ResourceLocation mountSound,

    /** Sound played when a seat is locked. */
    @Nullable ResourceLocation lockSound,

    /** Sound played when a seat is unlocked. */
    @Nullable ResourceLocation unlockSound,

    /** Looping sound played while a player struggles in a locked seat. */
    @Nullable ResourceLocation struggleLoopSound,

    /** Sound played on successful escape. */
    @Nullable ResourceLocation escapeSound,

    /** Sound played when an action is denied (e.g., locked seat interaction). */
    @Nullable ResourceLocation deniedSound
) {
    /** Empty feedback -- all sounds null (use defaults). */
    public static final FurnitureFeedback EMPTY = new FurnitureFeedback(
        null,
        null,
        null,
        null,
        null,
        null
    );
}
