#---------------------------------------------------------------------------------------------------------------------------------------------------#

# 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)

#---------------------------------------------------------------------------------------------------------------------------------------------------#

import pygame # Importujemy moduł
from random import choice, randint

pygame.init() # Włączenie pygame / inicjalizacja

# Utworzenie okna o określonych wymiarach
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

screen_surface = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

# Nadanie nazwy okienku
pygame.display.set_caption("Pierwsza gra")

# Utworzenie zegara, który nadzoruje stałe fps'y
clock = pygame.time.Clock()
FPS = 60
FPS_cnt = 0 

# Zmienna określająca, czy należy zamknąć grę
game_status = True

bonus_images = [
    "bonus_1.png",
    "bonus_2.png",
    "bonus_3.png",
]

bonus_objects = [] # Tu będą obiekty które są na ekranie

def generate_bonus_object():
    image_name = choice(bonus_images)
    # Losujemy współrzędne
    x = randint(0, SCREEN_WIDTH)
    y = randint(0, SCREEN_HEIGHT)
    position = [x, y]

    new_obj = load_image(image_name, position)
    bonus_objects.append(new_obj)

def print_bonus_objects():
    for obj in bonus_objects:
        print_image(obj)
        pass
    pass

# Funkcja do czytania klawiszy

def load_image(img_path: str, positoin):
    image = pygame.image.load(img_path) # Wczytujemy obrazek z argementów funkcji
    surface = image.convert() # Konwertujemy obrazek na powierzchni (surface)
    transparent_color = (0, 0, 0)
    surface.set_colorkey(transparent_color) # Ustawiamy kolor 0,0,0 jako przezroczysty

    # Pozycja wyświetlania obiektu
    rect = surface.get_rect(center = positoin)

    return [image, surface, rect]

player_pos = [SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2] # Środek 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
    
# Funkcje do zmiany położenia
def set_positoin_image(img_list, position):
    image, surface, rect = img_list
    rect = surface.get_rect(center=position)
    return [image, surface, rect]

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 kliknę na 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]

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:
    # Odczytanioe zdarzń zarejestrowanych przez komputer
    events = pygame.event.get()

    for event in events:
        # print(event)
        if event.type == pygame.QUIT: # Jeśli typ eventu to QUIT
            game_status = False # Ustawiam gameStatus 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_positoin_image(player, player_pos)

    player_pos = limit_position(player_pos) # Używamy naszej funkcji do ogrniczenia ruchów

    background_color = [0, 0, 0] 
    screen_surface.fill(background_color)


    if FPS_cnt % (FPS * 1) == 0:
        generate_bonus_object()
        pass
    print_bonus_objects()

    print_image(player)
    pygame.display.update() # Odświeżanie wybranego okna
    FPS_cnt += 1
    clock.tick(FPS)
    pass

pygame.quit() # Zamknięcie aplikacji
quit() # Zamknięcie skryptu
