package model;

import util.Position;

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

public class FireBehavior extends FFBehavior implements TangibleBehavior<ModelElement> {
    private List<ModelElement> obstacles=List.of(ModelElement.MOUNTAIN);

    public FireBehavior(ModelElement element) {
        super(element);
    }

    @Override
    public List<Position> getNext(BoardData boardData) {
        List<Position> firePositions = boardData.getPositions().get(element.ordinal());
        List<Position> newFirePositions = new ArrayList<>();
        if (boardData.getStep() % 2 == 0) {
            for (Position fire : firePositions) {
                for (Position neighbor:legalNeighbors(boardData).get(fire)) {
                if (!newFirePositions.contains(neighbor))
                    newFirePositions.add(neighbor);
                }
            }
        }
        return newFirePositions;
    }

    @Override
    public List<ModelElement> getObstacles() {
        return obstacles;
    }

    @Override
    public Map<Position, List<Position>> legalNeighbors(BoardData boardData) {
        Map<Position,List<Position>> neigbors= super.legalNeighbors(boardData);
        for (Map.Entry<Position,List<Position>> entry: neigbors.entrySet()) {
            for (ModelElement e:getObstacles()) {
                entry.getValue().removeAll(boardData.getPositions().get(e.ordinal()));
            }
        }
        return neigbors;
    }
}