/// <reference path="./Classes/Rulebook.ts" />
/// <reference path="./Classes/Rule.ts" />
/// <reference path="MachineBegins.ts" />
module PlayBegins {
    export var rulebook = new Rulebook<void>("Play Begins");
    export var LOAD_FAILED = false;
    let startingRoom;

    export function execute () {
        rulebook.execute({});
    }

    export function setStartingRoom (room : Room) {
        if (startingRoom != undefined) {
            console.warn("[InitialRoom] Multiple requests for starting room, please check.", startingRoom, room);
        }
        startingRoom = room;
    }

    export let PutPlayerIntoFirstRoom = rulebook.createAndAddRule({
        name : "Place player into initial room",
        firstPriority : Rule.PRIORITY_HIGHEST,
        priority : Rule.PRIORITY_MEDIUM,
        code : () => {
            if (WorldState.player.getRoom() != undefined) {
                console.debug(Rulebook.getIndentation() + "[InitialRoom] Player already in a room.", WorldState.player.getRoom());
            } else {
                startingRoom.place(WorldState.player);
            }
        }
    });

    export var RunEmptyTurnSequenceRule = new Rule ({
        name : "Run Empty Turn Sequence Rule",
        firstPriority : Rule.PRIORITY_LOWEST,
        priority : Rule.PRIORITY_LOWEST,
        code : (rulebook2 : RulebookRunner<void>) => {
            TurnSequence.execute();
        }
    });
    rulebook.addRule(RunEmptyTurnSequenceRule);
}

module MachineBegins {
    export let RunPlayBegins = MachineBegins.rulebook.createAndAddRule({
        firstPriority : Rule.PRIORITY_LOW,
        name : "Run Play Begins",
        code : () => {
            PlayBegins.execute();
        }
    });
}