package thb.jeanluc.adventure.loader.dto;

import java.util.List;
import java.util.Map;

/**
 * YAML representation of a single room.
 *
 * @param id          unique slug
 * @param name        display name
 * @param description description shown by {@code look}
 * @param exits       direction-name to target-room-id map
 * @param items       ids of items initially in this room
 * @param npcs        ids of NPCs initially in this room
 * @param exitLocks   optional condition-gates per exit direction
 * @param descriptionStates optional condition-gated description variants
 * @param dark        whether this room is dark; nullable
 * @param music       optional GUI background-music track filename; null = none
 */
public record RoomDto(
        String id,
        String name,
        String description,
        Map<String, String> exits,
        List<String> items,
        List<String> npcs,
        List<ExitLockDto> exitLocks,
        List<DescriptionStateDto> descriptionStates,
        Boolean dark,
        String music
) {
    /** Backward-compatible constructor without the optional state fields. */
    public RoomDto(String id, String name, String description,
                   Map<String, String> exits, List<String> items, List<String> npcs) {
        this(id, name, description, exits, items, npcs, null, null, null, null);
    }
}
