package indi.key.mipsemulator.controller.component;

import indi.key.mipsemulator.core.controller.Machine;
import indi.key.mipsemulator.model.info.BitArray;
import indi.key.mipsemulator.model.interfaces.TickCallback;
import indi.key.mipsemulator.core.controller.TimingRenderer;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

public class LedController implements TickCallback {

    private Machine machine;
    private Circle[] circles = new Circle[16];

    public LedController(GridPane ledPane, Machine machine) {
        this.machine = machine;
        for (int i = 0; i < 16; i++) {
            circles[i] = new Circle(3);
            circles[i].setFill(Color.GRAY);
            ledPane.add(circles[i], i, 0);
        }
        TimingRenderer.register(this);
    }

    @Override
    public void onTick(long ticks) {
        BitArray led = machine.getLed();
        assert led.length() == 16;
        for (int i = 0; i < 16; i++) {
            if (led.get(i)) {
                circles[15 - i].setFill(Color.YELLOW);
            } else {
                circles[15 - i].setFill(Color.rgb(220, 220, 220));
            }
        }
    }
}