/*
 * UIText.cpp
 *
 *  Created on: May 21, 2020
 *      Author: ayoungblood
 */

#include "UIText.h"
#include "../game/Game.hpp"
#include "../ecs/ECS.h"
#include "../ecs/Components.h"
#include "string.h"
#include <iostream>
#include <stdio.h>
#include <vector>

extern Manager manager;

UIText::UIText(std::string text, std::string texId, int x, int y, int letterW, int letterH, int lScale, std::string tag, Game::groupLabels group)
{
	inputText = text;
	textureID = texId;
	posX = x;
	posY = y;
	letterWidth = letterW;
	letterHeight = letterH;
	scale = lScale;
//     gameGroup = Game::groupLabels::groupUI_Layer3;
    auto& uiLetters(manager.addEntity());
    uiLetters.setTag(tag);
    uiLetters.addGroup(group);
}

UIText::~UIText()
{
}

void UIText::ParseString(std::string inputText, int x, int y, int letterScale, std::string tag, Game::groupLabels group)
{
//     gameGroup = group;
	//Parse input text into an array of char
	int posX = x;
	int posY = y;
	int i = 0;
	char current = inputText[i];
    int charsNumber = inputText.length();
//     printf("Counting string \'%s\': \n",inputText.c_str());
//     printf("%d\n",charsNumber);
    
	do
	{
		++i;
		if (strcmp(&current,"\n")!=0)
		{
			posX += letterWidth;
		}
		else
		{
			posX = x;
			posY += letterHeight;
		}
		UIText::AddLetter(posX, posY, current, tag, letterScale, group);
		current = inputText[i];
	} while ((strcmp(&current,"\0"))!=0);
}


void UIText::AddLetter(int xpos, int ypos, char crnt, std::string tag, int lttrScale, Game::groupLabels groupLabel)
{
// =======THIS NEEDS TO BE REFACTORED TO NOT USE INDIVIDUAL ENTITIES FOR EACH LETTER============
// 	auto& letter(manager.addEntity());
// 	letter.addComponent<TransformComponent>(xpos*lttrScale, ypos*lttrScale, letterWidth, letterHeight, 1);
// 	letter.addComponent<SpriteComponent>("font", SpriteComponent::spriteText, crnt, letterWidth, letterHeight, lttrScale);
//     letter.setTag(tag);
// 	letter.addGroup(groupLabel);
    SDL_Texture* letterTexture;
    letterTexture = Game::assets->GetTexture(textureID);
    SDL_Rect srcRect,destRect;
    srcRect.x = ((crnt-ASCII_START_IDX) % ASCII_ROW_COUNT)*letterWidth;
    srcRect.y = ((crnt-ASCII_START_IDX)/ASCII_ROW_COUNT)*letterHeight;
    srcRect.w = letterWidth;
    srcRect.h = letterHeight;
    destRect.x = xpos;
    destRect.y = ypos;
    destRect.w = letterWidth*scale;
    destRect.h = letterHeight*scale;
    
    TextureManager::Draw(letterTexture,srcRect,destRect,SDL_FLIP_NONE);
}


