package de.fhg.iais.roberta.visitor.hardware;

import de.fhg.iais.roberta.syntax.action.light.LedAction;
import de.fhg.iais.roberta.syntax.action.light.RgbLedOffAction;
import de.fhg.iais.roberta.syntax.action.light.RgbLedOnAction;
import de.fhg.iais.roberta.syntax.actors.arduino.bob3.RecallAction;
import de.fhg.iais.roberta.syntax.actors.arduino.bob3.ReceiveIRAction;
import de.fhg.iais.roberta.syntax.actors.arduino.bob3.RememberAction;
import de.fhg.iais.roberta.syntax.actors.arduino.bob3.SendIRAction;
import de.fhg.iais.roberta.syntax.lang.blocksequence.MainTask;
import de.fhg.iais.roberta.syntax.lang.functions.MathConstrainFunct;
import de.fhg.iais.roberta.syntax.lang.functions.MathRandomIntFunct;
import de.fhg.iais.roberta.syntax.lang.stmt.AssertStmt;
import de.fhg.iais.roberta.syntax.lang.stmt.DebugAction;
import de.fhg.iais.roberta.syntax.sensor.generic.InfraredSensor;
import de.fhg.iais.roberta.syntax.sensor.generic.PinTouchSensor;
import de.fhg.iais.roberta.syntax.sensor.generic.TemperatureSensor;
import de.fhg.iais.roberta.syntax.sensors.arduino.bob3.CodePadSensor;
import de.fhg.iais.roberta.visitor.IVisitor;

public interface INIBOVisitor<V> extends IVisitor<V> {
    V visitInfraredSensor(InfraredSensor infraredSensor);

    V visitTemperatureSensor(TemperatureSensor temperatureSensor);

    V visitMainTask(MainTask mainTask);

    V visitRgbLedOnAction(RgbLedOnAction rgbLedOnAction);

    V visitRgbLedOffAction(RgbLedOffAction rgbLedOffAction);

    V visitLedAction(LedAction ledAction);

    V visitSendIRAction(SendIRAction sendIRAction);

    V visitReceiveIRAction(ReceiveIRAction receiveIRAction);

    V visitRememberAction(RememberAction rememberAction);

    V visitRecallAction(RecallAction recallAction);

    V visitMathConstrainFunct(MathConstrainFunct mathConstrainFunct);

    V visitMathRandomIntFunct(MathRandomIntFunct mathRandomIntFunct);

    V visitDebugAction(DebugAction debugAction);

    V visitAssertStmt(AssertStmt assertStmt);

    V visitPinTouchSensor(PinTouchSensor pinTouchSensor);

    V visitCodePadSensor(CodePadSensor codePadSensor);
}
