#include <TGUI/TGUI.hpp>

using namespace sf;

FloatRect handleResize(Event::SizeEvent size);

int main()
{
    RenderWindow window(sf::VideoMode(800, 450), "Viewport Exemple");
    tgui::Gui gui(window);

    gui.setGlobalFont("font.ttf");
    
    auto menu = tgui::MenuBar::create();
    menu->setSize(window.getSize().x, 22);
    menu->addMenu("MenuOption-1");
    menu->addMenuItem("MenuOption-1", "Load");
    menu->addMenuItem("MenuOption-1", "Save");
    menu->addMenuItem("MenuOption-1", "Exit");
    menu->addMenu("MenuOption-2");
    menu->addMenuItem("MenuOption-2", "Copy");
    menu->addMenuItem("MenuOption-2", "Paste");
    menu->addMenu("MenuOption-3");
    menu->addMenuItem("MenuOption-3", "About");
    gui.add(menu);
    
    auto label = tgui::Label::create();
    label->setText("This is a label.\nAnd these are radio buttons:");
    label->setPosition(10, 90);
    label->setTextSize(18);
    gui.add(label);

    auto radioButton = tgui::RadioButton::create();
    radioButton->setPosition(20, 140);
    radioButton->setText("Yep!");
    radioButton->setSize(25, 25);
    gui.add(radioButton);
    
    radioButton = tgui::RadioButton::create();
    radioButton->setPosition(20, 170);
    radioButton->setText("Nope!");
    radioButton->setSize(25, 25);
    gui.add(radioButton);
    
    radioButton = tgui::RadioButton::create();
    radioButton->setPosition(20, 200);
    radioButton->setText("Don't know!");
    radioButton->setSize(25, 25);
    gui.add(radioButton);
    
    std::vector<RectangleShape> rectangles;
    for(unsigned int i{0}; i < 16; ++i)
    {
    	for(unsigned int j{0}; j < 18; ++j)
    	{
			if(i%2 != j%2)//Make one square over two
			{
    			Vector2f position(j*50.f, i*50.f);
    			rectangles.push_back(RectangleShape({50, 50}));
    			rectangles.back().setPosition(position);
    		}
    	}
   }

    while (window.isOpen())
    {
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
            else if(event.type == Event::Resized)
			{
				sf::View view = window.getView();//Resized view, maybe not in a 16:9 ratio
				view.setViewport(handleResize(event.size));
				window.setView(view);
				gui.setView(view);
			}

            gui.handleEvent(event);
        }

        window.clear();
        for(auto& rect : rectangles)
        	window.draw(rect);
        gui.draw();
        window.display();
    }

    return 0;
}

FloatRect handleResize(Event::SizeEvent size)
{
	unsigned int iw = size.width;
	unsigned int ih = size.height;
	float fh(ih), fw(iw);//If size is in a 16:9 ratio, it won't change.

	if(iw / 16 < ih / 9) //Taller than a 16:9 ratio
	{
		fh = iw * (9.0 / 16.0);
		fw = iw;
	}
	else if(iw / 16 > ih / 9) //Larger than a 16:9 ratio
	{
		fw = ih * (16.0 / 9.0);
		fh = ih;
	}

	float scalex = fw / iw;
	float scaley = fh / ih;
	return FloatRect((1 - scalex) / 2.0f, (1 - scaley) / 2.0f, scalex, scaley);
}

