import pygame
pygame.init()


# Rozmiar okna gry
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TUPLE = (SCREEN_WIDTH, SCREEN_HEIGHT)

# Ustawienie romiaru okna w pygame
pygame.display.set_caption("Pierwsza Gra")
surface_okna = pygame.display.set_mode(SCREEN_TUPLE)
# pygame.display.toggle_fullscreen()

# surface -> rejestruje TYLKO WYGLĄD obiektów
# rect -> rejestruje POŁOŻENIE obiektów
def load_image(sciezka: str, pozycja):
    obraz = pygame.image.load(sciezka)
    surface = obraz.convert()

    przezroczysty_kolor = (0, 0, 0)
    surface.set_colorkey(przezroczysty_kolor)
    
    rect = surface.get_rect(center=pozycja)
    return [obraz, surface, rect]

def print_image(dane_gracza):
    obraz, surface, rect = dane_gracza
    surface_okna.blit(surface, rect)

def calculate_player_movements(lista_klawiszy):
    
    zmiana_x = 0
    zmiana_y = 0

    if lista_klawiszy[pygame.K_w]:
        zmiana_y -= 10
    if lista_klawiszy[pygame.K_s]:
        zmiana_y += 10
    if lista_klawiszy[pygame.K_a]:
        zmiana_x -= 10
    if lista_klawiszy[pygame.K_d]:
        zmiana_x += 10
    return [zmiana_x, zmiana_y]

def set_position(pozycja, obraz_lista):
    obraz, surface, rect = obraz_lista
    rect = surface.get_rect(center=pozycja)
    return [obraz, surface, rect]

def limit_position(position):
    x, y = position
    #sprawdzamy i poprawiamy x i y
    #x
    if x < 0:
        x = SCREEN_WIDTH
    if x > SCREEN_WIDTH:
        x = 0
    if y < 0:
        y = SCREEN_HEIGHT
    if y > SCREEN_HEIGHT:
        y = 0
    return [x, y]

def fullscreen(lista_klawiszy, SCREEN_WIDTH, SCREEN_HEIGHT):
    if lista_klawiszy[pygame.K_f]:
        SCREEN_HEIGHT = 1080
        SCREEN_WIDTH = 1920
        pygame.display.toggle_fullscreen()
    return [SCREEN_WIDTH, SCREEN_HEIGHT]

pozycja_gracza = [SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2]
gracz = load_image(pozycja=pozycja_gracza, sciezka="player.png")
kolor_ekranu = [255, 0, 0]

# tworzymy zegar
zegar = pygame.time.Clock()

# zmienna, która określa, czy gra trwa
status_gry = True

#główna pętla gry
while status_gry:

    # odczytujemy zdarzenia zarejestrowane przez pygame
    # zwracane jako lista
    zdarzenia = pygame.event.get()
    for zdarzenie in zdarzenia:
        print(zdarzenie)

        if zdarzenie.type == pygame.QUIT:
            status_gry = False
    
    # wykrycie nacisnietego klawisza i zmiana wspolzednych
    nacisniete_klawisze = pygame.key.get_pressed()
    zmiana_x, zmiana_y = calculate_player_movements(nacisniete_klawisze)
    SCREEN_WIDTH, SCREEN_HEIGHT = fullscreen(nacisniete_klawisze, SCREEN_WIDTH, SCREEN_HEIGHT)
    pozycja_gracza[0] += zmiana_x
    pozycja_gracza[1] += zmiana_y

    # sprawdzenie granicy
    pozycja_gracza = limit_position(pozycja_gracza)
    gracz = set_position(pozycja_gracza, gracz)
    surface_okna.fill(kolor_ekranu)


    # odswiezenie ekranu
    print_image(gracz)
    pygame.display.update()
    zegar.tick(60)
    pass

#zamykanie aplikacji
pygame.quit()
quit()