package model.automata;

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

import java.util.List;

public enum WireWorldState implements State<WireWorldState> {
    DEAD, WIRE, BLUE, RED;


    @Override
    public Color getColor() {
        return switch (this) {
            case DEAD -> Color.BLACK;
            case WIRE -> Color.GOLD;
            case BLUE -> Color.BLUE;
            case RED -> Color.RED;
        };
    }

    @Override
    public WireWorldState cycle() {
        return switch (this) {
            case DEAD -> WIRE;
            case WIRE -> BLUE;
            case BLUE -> RED;
            case RED -> DEAD;
        };
    }

    @Override
    public WireWorldState update(List<WireWorldState> neighbours) {
        return switch (this) {
            case DEAD -> DEAD;
            case WIRE -> {
                int countBlues = State.count(BLUE, neighbours);
                yield (countBlues == 1 || countBlues == 2)? BLUE: WIRE;
            }
            case BLUE -> RED;
            case RED -> WIRE;
        };
    }
}