import pygame
import random
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, przezroczysty_kolor = (0, 0, 0)):
    obraz = pygame.image.load(sciezka)
    surface = obraz.convert()

    surface.set_colorkey(przezroczysty_kolor)
    surface = surface.convert_alpha()
    rect = surface.get_rect(center=pozycja)
    return [obraz, surface, rect]

def print_images(lista_obiektow):
    for obiekt in lista_obiektow:    
        obraz, surface, rect = obiekt
        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]

# tworzenie pozycji
pozycja_gracza = [SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2]
pozycja_celu = [random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT) ]

# tworzenie obiektow pygame
gracz = load_image(pozycja=pozycja_gracza, sciezka="player.png")
cel = load_image(pozycja=pozycja_celu, sciezka="bonus_1.png")

kolor_ekranu = [255, 0, 0]
ilosc_zebranych_punktow = 0

# tworzymy zegar
zegar = pygame.time.Clock()

# zmienna, która określa, czy gra trwa
status_gry = True
wygrana = False

#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)

    if pygame.Rect.colliderect(gracz[2], cel[2]):
        pozycja_celu = [random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)]
        cel = set_position(pozycja=pozycja_celu, obraz_lista=cel)
        ilosc_zebranych_punktow += 1

    if ilosc_zebranych_punktow > 1:
        wygrana = True

    # odswiezenie ekranu

    if wygrana == True:
        kolor_ekranu = [0, 0, 0]
        wygrana = load_image(pozycja=(SCREEN_WIDTH//2,SCREEN_HEIGHT//2), sciezka="wygrana.png")
        transparent = load_image(pozycja=(200, 100), sciezka="tlo.png")
        print_images([wygrana, transparent])
    else:
        print_images([cel, gracz])
    pygame.display.update()
    zegar.tick(60)
    pass

#zamykanie aplikacji
pygame.quit()
quit()