/**
 * Copyright (c) 2021 Dominic Masters
 * 
 * This software is released under the MIT License.
 * https://opensource.org/licenses/MIT
 */

#include "poker.h"

void pokerInit(poker_t *poker, engine_t *engine) {
  // Load the main shader
  assetShaderLoad(&poker->shader,
    "shaders/textured.vert", "shaders/textured.frag"
  );

  // Load the main font
  assetFontLoad(&poker->font, "fonts/opensans/OpenSans-Bold.ttf");

  // Initialize the render stuffs.
  pokerFrameInit(poker, &engine->render);
  pokerWorldInit(poker);
  pokerCardInit(poker);
  pokerPlayerInit(poker);
  pokerTalkInit(poker);

  // Hand over to the deal for the first time.
  pokerMatchInit(poker);
}

void pokerUpdate(poker_t *poker, engine_t *engine) {
  // Game Logic
  switch(poker->round) {
    case POKER_ROUND_MATCH:
      pokerMatchUpdate(poker);
      break;
    case POKER_ROUND_BET0:
    case POKER_ROUND_BET1:
    case POKER_ROUND_BET2:
    case POKER_ROUND_BET3:
      pokerBetUpdate(poker);
      break;
    default:
      break;
  }
  
  shaderUse(&poker->shader);
  pokerFrameWorld(poker, &engine->render);

  pokerWorldRender(poker);
  for(uint8_t pi = 0; pi < POKER_PLAYER_COUNT; pi++) {
    uint8_t seat = pokerPlayerGetSeatForPlayer(pi);
    pokerPlayerRender(poker, poker->players + pi, seat);
  }

  pokerFrameGui(poker, &engine->render);
  pokerTalkRender(poker, &engine->input);

  poker->textLastWidth = poker->guiWidth;
}

void pokerDispose(poker_t * poker) {
  pokerTalkDispose(poker);
  pokerWorldDispose(poker);
  shaderDispose(&poker->shader);
}