export const N_PLAYERS = 2;
export const N_COLORS = 5;
export const CARDS_PER_COLOR = 12;
export const N_CARDS = 60;
export const HAND_SIZE = 8;
export const INITIAL_DEAL = 16;
export const DECK_DRAWS = 44;
export const N_ACTIONS = 96;
export const MAX_STEPS = 400;
export const OBS_DIM = 454;
export const MAX_ABS_SCORE = 780;

export const LOC_DECK = 0;
export const LOC_P0_HAND = 1;
export const LOC_P1_HAND = 2;
export const LOC_P0_BOARD = 3;
export const LOC_P1_BOARD = 4;
export const LOC_DISCARD = 5;

export const PLAY = 0;
export const DISCARD = 1;
export const DRAW_DECK = 0;

export type PlaceType = typeof PLAY | typeof DISCARD;

export interface GameState {
  deckOrder: number[];
  drawPtr: number;
  cardLoc: number[];
  handPublic: boolean[];
  colTop: number[][];
  colHandshakes: number[][];
  colLength: number[][];
  piles: number[][];
  toMove: 0 | 1;
  stepCount: number;
  done: boolean;
}

export interface DecodedAction {
  handSlot: number;
  placeType: PlaceType;
  drawSource: number;
}
