package model;

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

import javafx.scene.paint.Color;
import util.Position;
import util.PositionUtil;
import util.PositionUtil;

public class Fire implements Entity {
    Board<Square> b;
    private Position position;
    private final Color viewColor = Color.RED;
    private int age;
    private final int priority = 0;

    public Fire(Position position, Board<Square> b) {
        this.b = b;
        this.position = position;
        this.age = 0;
    }

    public Fire(Position position, Board<Square> b, int age) {
        this.b = b;
        this.position = position;
        this.age = age;
    }

    @Override
    public List<Position> nextTurn(Board<Square> board) {
        if (board.getStepNumber() % 2 == 0)
            return new ArrayList<Position>();
        List<Position> positions = PositionUtil.generateAdjacentPositions(position, board);
        positions.removeIf( p -> b.doesSquareContainEntity(p, Mountain.class));
        for (Position p : positions) {
            if (b.getStates(p).isEmpty() && !b.getStates(p).getEntities().contains(Cloud.class)) {
                if (b.getStates(p).getMaxAge() < b.getStepNumber()
                        && PositionUtil.getManhattanDistance(position, p) == 1) {
                    board.addEntityAtSquare(new Fire(p, board), p);
                }
            }
            if (!b.doesPositionExist(p)) {
                positions.remove(p);
            }
        }
        return positions;
    }

    @Override
    public void setPosition(Position p) {
        this.position = p;
    }

    @Override
    public Position getPosition() {
        return this.position;
    }

    public Color getViewColor() {
        return this.viewColor;
    }

    @Override
    public int getAge() {
        return this.age;
    }

    @Override
    public void incrementAge() {
        this.age = age + 1;
    }

    @Override
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public int getPriority(){ return this.priority;}
}