package model.automata;

import javafx.scene.paint.Color;
import model.State;

import java.util.List;

public class BrianBrainState implements State<BrianBrainState> {
    enum StateType { DEAD,
        FIRE,
        READY_TO_FIRE }

    private final StateType currentState;

    public BrianBrainState(StateType state) {
        this.currentState = state;
    }

    @Override
    public Color getColor() {
        return switch (currentState) {
            case DEAD -> Color.WHITE;
            case FIRE -> Color.RED;
            case READY_TO_FIRE -> Color.YELLOW;
        };
    }
    @Override
    public BrianBrainState next() {
        return new BrianBrainState(currentState == StateType.FIRE ? StateType.DEAD : StateType.FIRE);
    }
    @Override
    public BrianBrainState update(List<BrianBrainState> neighbours) {
        int fireCount = (int) neighbours.stream().filter(n -> n.currentState == StateType.FIRE).count();

        if (currentState == StateType.READY_TO_FIRE && fireCount > 0) {
            return new BrianBrainState(StateType.FIRE);
        } else if (currentState == StateType.FIRE) {
            return new BrianBrainState(StateType.DEAD);
        } else {
            return this;
        }
    }
}