import random

import pygame
from Sliceable import Sliceable
from Sword import Sword
from ScoreManager import ScoreManager
from GameState import GameState


class GameManager:
    game_state = GameState.START
    game_time = 60

    def __init__(self):
        self.last_fruit_time = 0
        pygame.init()
        self.screen = pygame.display.set_mode((800, 600))
        pygame.display.set_caption("Fruit Warrior")
        self.clock = pygame.time.Clock()
        self.running = True

        # Zarządzanie grą
        self.sword = Sword()
        self.score_manager = ScoreManager()
        self.sliceables = []

    def run(self):

        while self.running:
            match self.game_state:
                case GameState.START:
                    self.handle_start()
                case GameState.PLAYING:
                    self.handle_play()
                case GameState.GAME_OVER:
                    self.handle_end()
            pygame.display.flip()
            self.clock.tick(60)

    def handle_start(self):
        self.screen.fill((0, 0, 0))

        font = pygame.font.Font(None, 74)
        text = font.render("Fruit Warrior", True, (255, 255, 255))
        text_rect = text.get_rect(center=(400, 200))
        self.screen.blit(text, text_rect)

        # Wyświetlanie najwyższych wyników
        font_score = pygame.font.Font(None, 36)
        text_highscores = font_score.render("Najwyższe Wyniki:", True, (255, 255, 255))
        self.screen.blit(text_highscores, (300, 250))

        highscores = self.score_manager.load_highscore_list()
        for i, score in enumerate(highscores[:5]):  # Wyświetl tylko top 5 wyników
            index_text = font_score.render(f"{i + 1}.", True, (255, 255, 255))
            self.screen.blit(index_text, (300, 290 + i * 30))

            # Rysowanie wyniku
            score_text = font_score.render(f"{score}", True, (255, 255, 0))  # Żółty kolor 
            self.screen.blit(score_text, (350, 290 + i * 30))

        # Przycisk "Naciśnij ENTER, by rozpocząć"
        button_rect = pygame.Rect(300, 500, 200, 50)
        pygame.draw.rect(self.screen, (0, 200, 0), button_rect)

        font_button = pygame.font.Font(None, 36)
        button_text = font_button.render("Naciśnij spację", True, (255, 255, 255))
        button_text_rect = button_text.get_rect(center=button_rect.center)
        self.screen.blit(button_text, button_text_rect)

        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    self.game_state = GameState.PLAYING

    def handle_play(self):
        pass
        # TODO:

    def handle_end(self):
        self.score_manager.save_highscore_list()
        self.screen.fill((0, 0, 0))

        font = pygame.font.Font(None, 74)
        text = font.render("Koniec Gry", True, (255, 255, 255))
        text_rect = text.get_rect(center=(400, 200))
        self.screen.blit(text, text_rect)

        # Wyświetlanie wyniku
        font_score = pygame.font.Font(None, 36)
        text_score = font_score.render(f"Wynik: {self.score_manager.score}", True, (255, 255, 255))
        self.screen.blit(text_score, (350, 300))

        # Przycisk "Naciśnij ENTER, by rozpocząć"
        button_rect = pygame.Rect(300, 500, 200, 50)
        pygame.draw.rect(self.screen, (0, 200, 0), button_rect)

        font_button = pygame.font.Font(None, 36)
        button_text = font_button.render("Naciśnij spację", True, (255, 255, 255))
        button_text_rect = button_text.get_rect(center=button_rect.center)
        self.screen.blit(button_text, button_text_rect)

        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_SPACE:
                    self.game_state = GameState.PLAYING
                    self.game_time = 60
                    self.score_manager.score = 0
                    self.fruits = []
                    self.bombs = []


if __name__ == "__main__":
    game = GameManager()
    game.run()
