/*
* Someone tells, that Qt can to build this
*/
#include "include/hotseatgame/gamemanager.h"
#include "cell.h"
#include <iostream>

GameManager::GameManager(QObject *parent) : QObject(parent)
{

}

void GameManager::buildGameTable(int colSize, int rowSize){
    col_table_size_ = colSize;
    row_table_size_ = rowSize;
    generateTable();
}

void GameManager::generateTable() {
    game_table_.assign(col_table_size_, std::vector< Cell* >(row_table_size_, nullptr));
    for (int col = 0; col < col_table_size_; ++col) {
        for (int row = 0; row < row_table_size_; ++row) {
            game_table_[col][row] = new Cell(nullptr);
        }
    }
    int isEven = 1;
    for (int col = 0; col < col_table_size_; ++col) {
        isEven ^= 1;
        for (int row = 0; row < row_table_size_; ++row) {
            if (col != 0 && row != 0 -isEven) {
                game_table_[col][row]->setleftUp(game_table_[col - 1][row - 1 +isEven]);
            }
            if (row != 0) {
                game_table_[col][row]->setleft(game_table_[col][row - 1]);
            }
            if (col != col_table_size_ - 1 && row != 0 -isEven) {
                game_table_[col][row]->setleftDown(game_table_[col + 1][row - 1 +isEven]);
            }

            if (col != 0 && row != row_table_size_ -isEven) {
                game_table_[col][row]->setrightUp(game_table_[col - 1][row +isEven]);
            }
            if (row != row_table_size_ - 1) {
                game_table_[col][row]->setright(game_table_[col][row + 1]);
            }
            if (col != col_table_size_ - 1 && row != row_table_size_ -isEven) {
                game_table_[col][row]->setrightDown(game_table_[col + 1][row +isEven]);
            }
        }
    }
}

UnitsQueue* GameManager::getTurnQueue(){
    return &turn_queue_;
}

void GameManager::AddToUnitQueue(Unit* unit){
    turn_queue_.add(unit);
}

void GameManager::RmFromUnitQueue(Unit* unit){
    turn_queue_.remove(unit);
}

int GameManager::getCurPlayerId(){
    return cur_player_id_;
};

Player* GameManager::getCurrentPlayer(){
    return player_manager_->getPlayer(cur_player_id_);
}
