#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <iostream>

void move_UP (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5)
{
    destrect.y -= offset;
    SDL_RenderClear(ren);
    SDL_RenderCopy(ren, tex, NULL, &destrect);
}

void move_DOWN (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5)
{
    destrect.y += offset;
    SDL_RenderClear(ren);
    SDL_RenderCopy(ren, tex, NULL, &destrect);
}

void move_LEFT (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5)
{
    destrect.x -= offset;
    SDL_RenderClear(ren);
    SDL_RenderCopy(ren, tex, NULL, &destrect);
}

void move_RIGHT (SDL_Renderer* ren, SDL_Texture* tex, SDL_Rect &destrect, int offset = 5)
{
    destrect.x += offset;
    SDL_RenderClear;
    SDL_RenderCopy(ren, tex, NULL, &destrect);
}

void render_UPDATE (SDL_Renderer* ren, SDL_Texture* tex[], SDL_Rect* destrect[], int states[])
{
    SDL_RenderClear(ren);
    if (states[0]) 
        SDL_RenderCopy(ren, tex[0], NULL, destrect[0]);
    if (states[1]) 
        SDL_RenderCopy(ren, tex[1], NULL, destrect[1]);
    if (states[2]) 
        SDL_RenderCopy(ren, tex[2], NULL, destrect[2]);
}

int main()
{
    SDL_DisplayMode displayMode;
    if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
    {
        std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
	    return 1;
    }
    int request = SDL_GetDesktopDisplayMode(0,&displayMode);
    std::cout << displayMode.w << " " << displayMode.h << std::endl;
    SDL_Window* win = SDL_CreateWindow("Hello World!", 0, 0, 1280, 720, SDL_WINDOW_SHOWN);
        if (win == nullptr)
        {
            std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
            return 1;
        }
    SDL_Renderer* ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
        if (ren == nullptr)
        {
            std::cout << "SDL_CreateRenderer Error: " << SDL_GetError() << std::endl;
            return 1;
        }
    const int player_wight = 333;
    const int player_height = 227;
    double texture_scale = 1.0;
    SDL_Rect sanya_rect;
        sanya_rect.x = 0;
        sanya_rect.y = 0;
        sanya_rect.w = player_wight;
        sanya_rect.h = player_height;
    SDL_Rect kirill_rect;
        kirill_rect.x = 0;
        kirill_rect.y = 200;
        kirill_rect.w = player_wight;
        kirill_rect.h = player_height;
    SDL_Rect background_rect;
        background_rect.x = 0;
        background_rect.y = 0;
        background_rect.h = displayMode.h;
        background_rect.w = displayMode.w;
    SDL_Texture* sanya = IMG_LoadTexture(ren, "sanya_wings.png");
    SDL_Texture* kirill = IMG_LoadTexture(ren, "kirill_wings.png");
    SDL_Texture* background = IMG_LoadTexture(ren, "background.bmp");
    SDL_RenderClear(ren);
    SDL_RenderCopy(ren, background, NULL, &background_rect);
    SDL_RenderCopy(ren, sanya, NULL, &sanya_rect);
    SDL_RenderCopy(ren, kirill, NULL, &kirill_rect);
    SDL_RenderPresent(ren);
    int bW, bH;
    SDL_QueryTexture(background, NULL, NULL, &bW, &bH);
    std::cout << bW << " " << bH << std::endl;
    SDL_Event event;
    const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
    bool quit = false;
    SDL_Texture* texture_array[3] = {background, sanya, kirill};
    SDL_Rect* rect_array[3] = {&background_rect, &sanya_rect, &kirill_rect};
    int texturesState_array[3] = {1,1,1};
    while (!quit)
    {
        while(SDL_PollEvent(&event))
	    {
            SDL_PumpEvents(); // обработчик событий.

            
std::cout << SDL_GetTicks() << std::endl;

            if (event.type == SDL_QUIT)
            {
                quit = true;
            }
            if (event.type == SDL_MOUSEBUTTONDOWN)
            {
                if (event.button.button == SDL_BUTTON_LEFT && event.button.x <= 10 && event.button.y <=10)
                {
                    quit = true;
                }
                if (event.button.button == SDL_BUTTON_RIGHT)
                {
                    texturesState_array[1] = 1;
                }
                if ((event.button.button == SDL_BUTTON_LEFT) && (event.button.x >= sanya_rect.x) && (event.button.y >= sanya_rect.y) && (event.button.x <= sanya_rect.w + sanya_rect.x) && (event.button.y <= sanya_rect.h + sanya_rect.y))
                {
                    texturesState_array[1] = 0;
                }
            }
            if (keyboardState[SDL_SCANCODE_UP])
            {
                move_UP(ren, kirill, kirill_rect);
            }
            if (keyboardState[SDL_SCANCODE_W])
            {
                move_UP(ren, sanya, sanya_rect);
            }
            if (keyboardState[SDL_SCANCODE_DOWN])
            {
                move_DOWN(ren, kirill, kirill_rect);
            }
            if (keyboardState[SDL_SCANCODE_S])
            {
                move_DOWN(ren, sanya, sanya_rect);
            }
            if (keyboardState[SDL_SCANCODE_LEFT])
            {
                move_LEFT(ren, kirill, kirill_rect);
            }
            if (keyboardState[SDL_SCANCODE_A])
            {
                move_LEFT(ren, sanya, sanya_rect);
            }
            if (keyboardState[SDL_SCANCODE_RIGHT])
            {
                move_RIGHT(ren, kirill, kirill_rect);
            }
            if (keyboardState[SDL_SCANCODE_D])
            {
                move_RIGHT(ren, sanya, sanya_rect);
            }
            if (keyboardState[SDL_SCANCODE_KP_PLUS])
            {
                texture_scale += 0.2;
                kirill_rect.w = player_wight * texture_scale;
                kirill_rect.h = player_height * texture_scale;
                sanya_rect.w = player_wight * texture_scale;
                sanya_rect.h = player_height * texture_scale;
            }
            ++sanya_rect.x;
            if (keyboardState[SDL_SCANCODE_KP_MINUS])
            {
                texture_scale -= 0.2;
                kirill_rect.w = player_wight * texture_scale;
                kirill_rect.h = player_height * texture_scale;
                sanya_rect.w = player_wight * texture_scale;
                sanya_rect.h = player_height * texture_scale;
            }
            if (keyboardState[SDL_SCANCODE_ESCAPE])
            {
                quit = true;
            }
            render_UPDATE(ren, texture_array, rect_array, texturesState_array);
            SDL_RenderPresent(ren);
        }
    }
    SDL_DestroyTexture(sanya);
    SDL_DestroyTexture(kirill);
    SDL_DestroyTexture(background);
    SDL_DestroyWindow(win);
    SDL_DestroyRenderer(ren);
    SDL_Quit();
    return 0;
}