module scone.input.input;

import scone.input.os.standard_input : StandardInput;
import scone.input.keyboard_event : KeyboardEvent;

class Input
{
    this(StandardInput input)
    {
        this.input = input;
        input.initialize();
    }

    ~this()
    {
        this.input.deinitialize();
    }

    KeyboardEvent[] keyboard()
    {
        return this.input.latestKeyboardEvents();
    }

    private StandardInput input;
}

unittest
{
    import scone.core.dummy : DummyInput;
    import scone.input.keyboard_event : KeyboardEvent;
    import scone.input.scone_control_key : SCK;
    import scone.input.scone_key : SK;

    auto stdin = new DummyInput();

    auto input = new Input(stdin);
    assert(input.keyboard() == []);

    stdin.appendDummyKeyboardEvent(KeyboardEvent(SK.a, SCK.none));
    stdin.appendDummyKeyboardEvent(KeyboardEvent(SK.b, SCK.none));
    assert(input.keyboard() == [KeyboardEvent(SK.a, SCK.none), KeyboardEvent(SK.b, SCK.none)]);
    assert(input.keyboard() == []);

    destroy(input);
}