template "U++ Core with SDL2" main;

option "Create header" header;
option "Initialize video" video;

@@<:PACKAGE:>.h
??header
#ifndef _<:PACKAGE:>_<:PACKAGE:>_h
#define _<:PACKAGE:>_<:PACKAGE:>_h

#include <Core/Core.h>

#ifdef PLATFORM_POSIX
#include <SDL2/SDL.h>
#else
#include <SDL.h>
#endif

#endif
@@<:PACKAGE:>.cpp
<:?header:>#include "<:PACKAGE:>.h"<:/:>#include <Core/Core.h>

#ifdef PLATFORM_POSIX
#include <SDL2/SDL.h>
#else
#include <SDL.h>
#endif<:.:>
<:?video:>
SDL_Window* CreateWindow(const int width, const int height, const int flags)
{
	auto* window = SDL_CreateWindow(
		"<:PACKAGE:>",
		SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
		width, height,
		flags);
	if(!window)
	{
		Upp::Cerr() << "Couldn't set display mode: " << SDL_GetError() << "\n";
		return nullptr;
	}
	return window;
}

void Paint(SDL_Renderer* renderer)
{
	SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
	SDL_RenderClear(renderer);
	SDL_RenderPresent(renderer);
}
<:.:>
int main(int argc, char** argv)
{
	if(SDL_Init(SDL_INIT_VIDEO) < 0)
		return 1;
<:?video:>
	int videoflags = SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI;
	auto* window = CreateWindow(800, 600, videoflags);
	if(!window)
		return 1;
	auto* renderer = SDL_CreateRenderer(window, -1, 0);
<:.:>
	bool done = false;
	while(!done)
	{
		SDL_Event event;
		if(SDL_PollEvent(&event))
		{
			switch (event.type)
			{
				case SDL_KEYDOWN:
					break;
				case SDL_QUIT:
					done = true;
					break;
				default:
					break;
			}
		}
		<:?video:>else
		{
			Paint(renderer);
		}<:.:>
	}<:?video:>
    SDL_DestroyRenderer(renderer);
	SDL_DestroyWindow(window);<:.:>
	SDL_Quit();
	return 0;
}
@@<:PACKAGE:>.upp
uses
	Core;

library(WIN32) SDL2.lib;
library(POSIX) SDL2;
pkg_config
	sdl2;

file<:?header:>
	<:PACKAGE:>.h,<:.:>
	<:PACKAGE:>.cpp;

mainconfig
	"" = "";
