package upem.net.tcp.nonblocking.chat;

import java.nio.ByteBuffer;

/**
 * Created by carayol on 02/05/16.
 */
public class IntReader implements Reader {

    private static enum State {WAITING_FOR_INT,ERROR,RETRIEVED,DONE};

    private final ByteBuffer bb;
    private State state;


    public IntReader(ByteBuffer bb) {
        this.bb = bb;
        this.state=State.WAITING_FOR_INT;
    }




    @Override
    public ProcessStatus process() {
       if (bb.position()<Integer.BYTES) {
           return ProcessStatus.REFILL;
       } else {
           state=State.DONE;
           return ProcessStatus.DONE;
       }


    }

    @Override
    public Integer get() {
        if (state!=State.DONE) {
            throw new IllegalStateException("Calling IntReader.get() in state "+state);
        }
        bb.flip();
        int val=bb.getInt();
        bb.compact();
        state=State.RETRIEVED;
        return val;
    }

    @Override
    public void reset() {
        state=State.WAITING_FOR_INT;
    }
}
