#pragma once
#include <SFML/System/Thread.hpp>
#include <SFML/Window/Event.hpp>
#include <SFML/Graphics.hpp>
#include <SFML/System/Sleep.hpp>
#include <SFML/System/Time.hpp>
#include "Utils.hpp"

class Board {

	private:

		// Wskaźnik na okno.
		sf::RenderWindow* window;
		sf::VideoMode videoMode;

		sf::Texture boardTexture;
		sf::Sprite   boardSprite;
		sf::Font          Ubuntu;

		// Rysowanie obiektów na ekranie
		void drawPawn(short color, short field, short howMany = 1);

		// Obiekty przechowujące pionki i tekst w celu renderowania
		std::vector<sf::CircleShape>     pieces{};
		std::vector<sf::Text>        piecesText{};

	public:

		// Aby przekazać je do Engine
		sf::Event ev;
		sf::View view;

		short fields[121][4] = {{}};

		// Konstruktor, destruktor
		void closeWindow();

		// Akcesor
		bool running() const;

		// Metody klasy
		void pollEvents();
		void update();
		void render();
		void updateAndRender();
		void run();
		bool manualUpdate();
		void drawPawns();
		sf::Event lastEvent;

		// Sterowanie oknem
		void initVariables();
		void initWindow();
		void initBoard();
		void initView();
		void smartSleep(int millis);
		void handleResize(unsigned int newWidth, unsigned int newHeight);
		std::string asyncStrCin();
		std::string asyncStrGetline();
		void selectAField(short &pickStatus, short &field);

};