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

#include "talk.h"

void pokerTalkInit(poker_t *poker) {
  poker->talkText = NULL;
  poker->talkTextInfo = NULL;
  poker->textLastWidth = 0;
}

void pokerTalkDispose(poker_t *poker) {
  if(poker->talkTextInfo == NULL) return;
  fontTextInfoDispose(poker->talkTextInfo);
  primitiveDispose(&poker->talkPrimitive);
}

void pokerTalkTextRebuffer(poker_t *poker) {
  // Check if we need to force a redraw or not.
  if(poker->talkText == NULL || poker->textLastWidth != poker->guiWidth) {
    if(poker->talkTextInfo != NULL) {
      fontTextInfoDispose(poker->talkTextInfo);
      primitiveDispose(&poker->talkPrimitive);
      poker->talkTextInfo = NULL;
    }
  }

  if(poker->talkText == NULL) return;

  // Rebuffer
  poker->talkTextInfo = fontTextClamp(&poker->font, poker->talkText, poker->guiWidth);
  fontTextInit(&poker->font, &poker->talkPrimitive, poker->talkTextInfo);
}

void pokerTalkRender(poker_t *poker, input_t *input) {
  pokerTalkTextRebuffer(poker);
  if(poker->talkTextInfo == NULL) return;

  // Render text
  shaderUsePosition(&poker->shader,
    0,POKER_GUI_HEIGHT-poker->talkTextInfo->height,0,
    0,0,0
  );
  shaderUseTexture(&poker->shader, &poker->font.texture);
  primitiveDraw(&poker->talkPrimitive, 0, -1);

  if(inputIsPressed(input, INPUT_ACCEPT)) {
    poker->talkText = NULL;
  }
}

void pokerTalk(poker_t *poker, char *text) {
  poker->talkText = text;
  poker->roundTextCounter++;
}

bool pokerTalkIsTalking(poker_t *poker) {
  return poker->talkText != NULL || poker->talkTextInfo != NULL;
}