// blah explicitly defining a state machine will happen later
//package org.webpieces.httpclient.impl;
//
//import com.webpieces.http2parser.api.dto.Http2Frame;
//import com.webpieces.http2parser.api.dto.Http2FrameType;
//
//import java.util.HashMap;
//import java.util.Map;
//
//import static org.webpieces.httpclient.impl.Http2StateMachine.Side.RCV;
//import static org.webpieces.httpclient.impl.Http2StateMachine.Side.SEND;
//
//public class Http2StateMachine {
// enum Side {
// SEND, RCV
// }
//
// private class TransitionTable {
// Map<Side, Map<Http2FrameType, Stream.StreamStatus>> transitions;
//
//
// TransitionTable(Map<Http2FrameType, Stream.StreamStatus> sendTransitions,
// Map<Http2FrameType, Stream.StreamStatus> rcvTransitions) {
// transitions = new HashMap<>();
// transitions.put(SEND, sendTransitions);
// transitions.put(RCV, rcvTransitions);
// }
//
// public Map<Side, Map<Http2FrameType, Stream.StreamStatus>> getTransitions() {
// return transitions;
// }
// }
//
// private Map<Stream.StreamStatus,
// TransitionTable> transitionTables = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> idleTransitionsSend = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> reservedLocalTransitionsSend = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> reservedRemoteTransitionsSend = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> openTransitionsSend = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> halfClosedLocalTransitionsSend = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> halfClosedRemoteTransitionsSend = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> closedTransitionsSend = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> idleTransitionsRcv = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> reservedLocalTransitionsRcv = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> reservedRemoteTransitionsRcv = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> openTransitionsRcv = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> halfClosedLocalTransitionsRcv = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> halfClosedRemoteTransitionsRcv = new HashMap<>();
// private Map<Http2FrameType, Stream.StreamStatus> closedTransitionsRcv = new HashMap<>();
//
// public Http2StateMachine() {
// idleTransitionsSend.put(Http2FrameType.PUSH_PROMISE, Stream.StreamStatus.RESERVED_LOCAL);
// idleTransitionsRcv.put(Http2FrameType.PUSH_PROMISE, Stream.StreamStatus.RESERVED_REMOTE);
// idleTransitionsRcv.put(Http2FrameType.HEADERS, Stream.StreamStatus.OPEN);
// idleTransitionsSend.put(Http2FrameType.HEADERS, Stream.StreamStatus.OPEN);
//
// reservedLocalTransitionsRcv
// transitionTables.put(Stream.StreamStatus.IDLE, new TransitionTable(idleTransitionsSend, idleTransitionsRcv));
// transitionTables.put(Stream.StreamStatus.RESERVED_LOCAL, new TransitionTable(reservedLocalTransitionsSend, reservedLocalTransitionsRcv));
// transitionTables.put(Stream.StreamStatus.RESERVED_REMOTE, new TransitionTable(reservedRemoteTransitionsSend, reservedRemoteTransitionsRcv));
// transitionTables.put(Stream.StreamStatus.OPEN, new TransitionTable(openTransitionsSend, openTransitionsRcv));
// transitionTables.put(Stream.StreamStatus.HALF_CLOSED_LOCAL, new TransitionTable(halfClosedLocalTransitionsSend, halfClosedLocalTransitionsRcv));
// transitionTables.put(Stream.StreamStatus.HALF_CLOSED_REMOTE, new TransitionTable(halfClosedRemoteTransitionsSend, halfClosedRemoteTransitionsRcv));
// transitionTables.put(Stream.StreamStatus.CLOSED, new TransitionTable(closedTransitionsSend, closedTransitionsRcv);
// }
//
// public Stream.StreamStatus getNewStatus(Side side, Stream.StreamStatus startingStatus, Http2FrameType frameType) {
// return transitionTables.get(startingStatus).getTransitions().get(side).get(frameType);
// }
//}