import pygame #importujemy moduł 
from random import choice, randint
# def oblicz_wysokosc(proporcje_szerokosc, proporcje_wysokosc, piksele_szerokosc):
#     wys = int(proporcje_wysokosc / proporcje_szerokosc* piksele_szerokosc)
#     return wys

# test = oblicz_wysokosc(16,9,1920)
# print(test)


pygame.init() #właczenie pygame / inicjalizacja

#utworzenie okna o okreslonycb wymiarach 
screen_width = 800
screen_height = 600

screen_surface = pygame.display.set_mode((screen_width, screen_height))

# nadamy nazwe okienku 
pygame.display.set_caption("pierwsza gra")

# Utworzenie zegara ktory nadzoje stale fps
clock = pygame.time.Clock()
FPS = 60
fps_cnt = 0



#zmienna okreslajaca czy zamknąc grę 
game_status = True

bonus_images = [
    "bonus_1.png",
    "bonus_2.png",
    "bonus_3.png",
]


bonus_object = []  # tu będą obiekty które sa na ekranie 

def generate_bonuis_object():
    image_name = choice(bonus_images)
    #losujemy wspołrzedne
    x = randint(0, screen_width)
    y = randint(0, screen_height)
    position = [x, y]

    new_obj = load_image(image_name, position)
    bonus_object.append(new_obj)

def print_bonus_objects():
    for obj in bonus_object:
        print_image(obj)
        pass
    pass



def load_image(img_path: str, position):
    image = pygame.image.load(img_path) #wczytujemy obrazek z argumentu funkcji
    surface = image.convert() #konwertujemy obrazek na poweirzchni (surface)
    
    transparent_color = (0, 0, 0)
    surface.set_colorkey(transparent_color) # ustawiamy kolor 0, 0, 0 jako przezroczysty

    # pozycja wysweitlania obiektu 
    rect = surface.get_rect(center = position)

    return [image, surface, rect]


player_pos = [screen_width // 2, screen_height // 2] # srodek ekranu
player = load_image('player.png', player_pos)

def print_image(img_List) -> None:
    image, surface, rect = img_List # przypisuje 3 zmienne 
    screen_surface.blit(surface, rect)
    pass

def calculate_player_movement(keys):
    speed = 10
    delta_x = 0
    delta_y = 0

    if keys[pygame.K_LSHIFT]:
        speed *= 2
    if keys[pygame.K_w]: #kiedy klikne w klawiaturze "w"
        delta_y -= speed
    if keys[pygame.K_s]:
        delta_y += speed
    if keys[pygame.K_a]:
        delta_x -= speed
    if keys[pygame.K_d]:
        delta_x += speed

    return [delta_x, delta_y]

#funkcja do zmiany pozycji
def set_posision_image(img_list, position):
    image, surface, rect = img_list
    rect = surface.get_rect(center = position)
    return [image, surface, rect]

def limit_position(position):
    x, y = position
    x = max(0, min(x, screen_width))
    y = max(0, min(y, screen_height))


    return[x,y]

#kod wykonywany gdy aplikacja działa 
while game_status:
    #odczytanie zdarzen zarejestrowanych przez komupter 
    events = pygame.event.get()

    for event in events:
        # print(event)
        if event.type == pygame.QUIT: #Jesli typ eventu to QUIT
            game_status = False # Ustawiamy game status na false
            pass
        pass

    pressed_keys = pygame.key.get_pressed()
    delta_x, delta_y = calculate_player_movement(pressed_keys)

    player_pos[0] += delta_x
    player_pos[1] += delta_y
    player = set_posision_image(player, player_pos)
    player_pos = limit_position(player_pos) #uzywamy naszej funkcji do ograniczenia ruchu

    background_color = [194, 23, 191]  #ustawienie koloru i odswiezenia tła
    screen_surface.fill(background_color)

    if fps_cnt % (FPS * 1) == 0:
      generate_bonuis_object()
      pass
    print_bonus_objects()

    print_image(player)
    
    pygame.display.update() # odsweizanie wyswietlanego okna
    fps_cnt += 1
    clock.tick(FPS)
    pass 

pygame.quit() # zamkniecie aplikacji 
quit() #zamkniecie skryptu










