#include "../raylib.h"
#include "input.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define ENTER 257
#define BACKSPACE 259

void push_character(Input *input, char c) {
  if (input->input_length < INPUT_BUFFER_MAX_LENGTH) {
    input->input_buffer[input->input_length++] = c;
    input->input_buffer[input->input_length] = 0;
  }
}

void pop_character(Input *input) {
  if (input->input_length > 0) {
    input->input_buffer[input->input_length - 1] = 0;
    input->input_length--;
  }
}

void clear_input_buffer(Input *input) {
  input->input_buffer[0] = 0;
  input->input_length = 0; 
}

void push_input_buffer_to_log(Input *input) {
  push_line_to_log(input->log, input->input_buffer);
}

void push_command_to_log(Input *input) {
  push_line_to_log(input->log, &(input->command));
}

void handleKeyPress(Input *input, int c) {
  if (c == BACKSPACE) {
    pop_character(input);
  } else if (c == ENTER) {
    push_command_to_log(input);
    game_handle_command(input->g, input->input_buffer);
    clear_input_buffer(input);
  } else if ((c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == ' ') {
    push_character(input, (char) c);
  }
}

void handle_pressed_keys(Input *input) {
  int c;
  while((c = GetKeyPressed())) {
    handleKeyPress(input, c);
  }
}

void draw_prompt(Input *input) {
  DrawText("> ", input->position.x, input->position.y, 20, YELLOW);
}

void draw_text(Input *input) {
  draw_prompt(input);

  // int text_width = MeasureText(input->input_buffer, 20);
  DrawText(
	   input->input_buffer,
	   input->position.x + 20,
	   input->position.y,
	   20,
	   RAYWHITE
	   );
}

Input *create_input(Vector2 position) {
  Input *input = malloc(sizeof(Input));
  input->position.x = position.x;
  input->position.y = position.y;
  input->input_buffer[0] = 0;
  return input;
}

void free_input(Input* input) {
  free(input);
}