#ifndef TABLE_SEARCH_H
#define TABLE_SEARCH_H

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#include <stdbool.h>
#include <string.h>
#include <assert.h>
#include <time.h>

#include "oware.h"

#define MAX_INFINITY (INT_MAX - 1)
#define MIN_INFINITY (INT_MIN + 1)

#define TABLE_SIZE 100000
#define WHOLE_BOARD_SIZE (BOARD_SIZE << 1)
#define MAX_PIECES (50)

typedef struct table_entry {
    int hash;
    int depth;
    int evaluated;
    int best_move;
} TableEntry;

int table_index(int hash);
int table_hash(int thisside[], int otherside[]);
void init_hashes();
int helper_alpha_beta_search(int depth, int alpha, int beta, int thisside[], int otherside[]);
int alpha_beta_bestmove(int depth, int thisside[], int otherside[], int *vp);
int value(int thisside[], int otherside[]);
int value1(int side[]);

#endif