<?php

require_once '../src/core.php';

use Engine\GameOutcome;
use Engine\MinimaxAStar;
use Engine\MinimaxDF;
use Engine\PeSTO;
use Engine\PieceValues;
use Engine\WeightedHeuristics;
use Game\Game;
use Game\Move;

session_start();

if (isset($_SESSION["game"])) {
    $game = $_SESSION["game"];
    $engine = $_SESSION["engine"];
} else {
    $game = Game::fromStartPosition();
    //$engine = new MinimaxAStar(1.0, new WeightedHeuristics([
    $engine = new MinimaxDF(1, new WeightedHeuristics([
        [new GameOutcome(), 1.0],
        [new PieceValues(), 1.0],
        [new PeSTO(), 1.0],
    ]));

    $_SESSION["game"] = $game;
    $_SESSION["engine"] = $engine;
}

$move = null;
$interactive = true;

$content = function() use ($game, &$move, &$interactive) {
    require "../src/View/fragments/game.php";
};

if (isset($_GET["move"])) {
    $move = Move::fromJS($_REQUEST["move"]);

    if (isset($_GET["wait"])) {
        $opponentMove = $engine->nextMove($game);
        $game->applyInPlace($opponentMove);

        $content();
    } else {
        $game->applyInPlace($move);

        $interactive = false;
        $content();
    }

} else {
    require "../src/View/base.php";
}