#include "main.h"


#define RED "\033[38;2;255;0;0m"
#define GREEN "\033[38;2;0;255;0m"
#define BLUE "\033[38;2;0;0;255m"
#define YELLOW "\033[38;2;255;255;0m"
#define MAGENTA "\033[38;2;255;0;255m"
#define TEAL "\033[38;2;0;255;255m"
#define PURPLE "\033[38;2;127;0;255m"
#define WHITE "\033[38;2;255;255;255m"


void draw_color (tetromino current_square) {
  switch (current_square) {
    case I_PIECE:
      printf("%s", RED);
      break;
    case J_PIECE:
      printf("%s", GREEN);
      break;
    case L_PIECE:
      printf("%s", BLUE);
      break;
    case O_PIECE:
      printf("%s", YELLOW);
      break;
    case S_PIECE:
      printf("%s", MAGENTA);
      break;
    case T_PIECE:
      printf("%s", TEAL);
      break;
    case Z_PIECE:
      printf("%s", PURPLE);
      break;
  } 
}


void draw_board(piece current_piece, bool *blink, bool is_piece) {

  uint8_t i, j;


  printf("\033[H");
  printf("┏");
  for (i = 0; i < FIELD_WIDTH; i++)
    printf("━━");
  printf("┓\n");


  for (i = 0; i < FIELD_HEIGHT; i++) {
    
    printf("┃");

    for (j = 0; j < FIELD_WIDTH; j++) {
      
      if ( blink != NULL && blink[i]) {
  
        printf("%s", WHITE);
      } else {


        tetromino current_square = current_square = playfield[i][j + BORDER_WIDTH];

        if (is_piece) {

          uint8_t k, l;
          
          for (k = 0; k < current_piece.size; k++) {
            for (l = 0; l < current_piece.size; l++) {

              coord points = find_direction(current_piece, l, k);

              if (
                i == current_piece.y + points.y && 
                j == current_piece.x + points.x - BORDER_WIDTH && 
                current_piece.piece[k][l]) 
              {
                current_square = current_piece.name;
              }
            }
          }
        }

        if (current_square <= EMPTY || current_square > Z_PIECE) {
          printf("· ");
          continue;
        }

        draw_color(current_square);
      }
        
      printf("██\033[0m");
    }
    printf("┃\n");
  }

  printf("┗");
  for (i = 0; i < FIELD_WIDTH; i++)
    printf("━━");
  printf("┛\n");
}
