module command.remote.app;

import command.remote.remotecontrol;
import command.remote.lightoncommand;
import command.remote.lightoffcommand;
import command.remote.light;
import command.remote.ceilingfan;
import command.remote.ceilingfanoffcommand;
import command.remote.ceilingfanoncommand;
import command.remote.garagedoorupcommand;
import command.remote.garagedoordowncommand;
import command.remote.garagedoor;
import command.remote.stereoonwithcdcommand;
import command.remote.stereo;
import command.remote.stereooffcommand;
import std.stdio : writeln;

void main()
{
    auto remoteControl = new RemoteControl();

    auto livingRoomLight = new Light("Living Room");
    auto kitchenLight =  new Light("Kitchen");
    auto ceilingFan = new CeilingFan("Living Room");
    auto garageDoor = new GarageDoor("Garage");
    auto stereo = new Stereo("Living Room");

    auto livingRoomLightOn = new LightOnCommand(livingRoomLight);
    auto livingRoomLightOff = new LightOffCommand(livingRoomLight);
    auto kitchenLightOn = new LightOnCommand(kitchenLight);
    auto kitchenLightOff = new LightOffCommand(kitchenLight);
    auto ceilingFanOn = new CeilingFanOnCommand(ceilingFan);
    auto ceilingFanOff = new CeilingFanOffCommand(ceilingFan);
    auto garageDoorUp = new GarageDoorUpCommand(garageDoor);
    auto garageDoorDown = new GarageDoorDownCommand(garageDoor);
    auto stereoOnWithCD = new StereoOnWithCDCommand(stereo);
    auto stereoOff = new StereoOffCommand(stereo);

    remoteControl.setCommand(0, livingRoomLightOn, livingRoomLightOff);
    remoteControl.setCommand(1, kitchenLightOn, kitchenLightOff);
    remoteControl.setCommand(2, ceilingFanOn, ceilingFanOff);
    remoteControl.setCommand(3, stereoOnWithCD, stereoOff);
    remoteControl.setCommand(4, garageDoorUp, garageDoorDown);

    writeln(remoteControl);

    remoteControl.onButtonWasPressed(0);
    remoteControl.offButtonWasPressed(0);
    remoteControl.onButtonWasPressed(1);
    remoteControl.offButtonWasPressed(1);
    remoteControl.onButtonWasPressed(2);
    remoteControl.offButtonWasPressed(2);
    remoteControl.onButtonWasPressed(3);
    remoteControl.offButtonWasPressed(3);
    remoteControl.onButtonWasPressed(4);
    remoteControl.offButtonWasPressed(4);
}
