package thb.jeanluc.adventure.command.impl;

import org.junit.jupiter.api.Test;
import thb.jeanluc.adventure.game.GameContext;
import thb.jeanluc.adventure.io.TestIO;
import thb.jeanluc.adventure.model.Direction;
import thb.jeanluc.adventure.model.Player;
import thb.jeanluc.adventure.model.Room;
import thb.jeanluc.adventure.model.World;

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

import static org.assertj.core.api.Assertions.assertThat;

class MapCommandTest {

    @Test
    void map_showsVisitedRoomAndKnownNeighbour() {
        Room kitchen = new Room("kitchen", "Kitchen", "d");
        Room hallway = new Room("hallway", "Hallway", "d");
        kitchen.addExit(Direction.NORTH, hallway);
        hallway.addExit(Direction.SOUTH, kitchen);
        Map<String, Room> rooms = new LinkedHashMap<>();
        rooms.put("kitchen", kitchen);
        rooms.put("hallway", hallway);
        World world = new World(rooms, Map.of(), Map.of(), "t", "w");

        Player player = new Player(kitchen, 0);   // visited = {kitchen}; hallway is a KNOWN stub
        TestIO io = new TestIO();
        GameContext ctx = new GameContext(world, player, io);

        new MapCommand().execute(ctx, List.of());

        String out = io.allOutput();
        assertThat(out).contains("Kitchen"); // current room name appears on the map
        assertThat(out).contains("?");        // unexplored neighbour stub
    }
}
