import pygame
import random

import ScoreManager
from Particle import Particle


class Sliceable:

    def __init__(self):
        self.particles = []
        self.is_already_sliced = False
        self.is_bomb = random.randint(1, 5) == 1
        self.x = random.choice([50, 750])
        self.y = 600
        self.color = (255, 0, 0) if self.is_bomb else (0, 255, 0)
        self.radius = 15
        self.speed_y = random.randint(-18, -12)
        # self.speed_x = random.choice([-3, 3])
        if self.x > 400:
            self.speed_x = -5
        else:
            self.speed_x = 5

    def update(self):
        self.x += self.speed_x
        self.y += self.speed_y
        self.speed_y += 0.3  # Przyciąganie w dół

    def draw(self, screen):
        if not self.is_already_sliced:
            pygame.draw.circle(screen, self.color, (int(self.x), int(self.y)), self.radius)

        for particle in self.particles:
            particle.update()
            particle.draw(screen)

    def check_collision(self, score_manager: ScoreManager, is_clicked):
        # Oblicz odległość między myszką a środkiem owocu
        sword = pygame.mouse.get_pos()
        distance = ((sword[0] - self.x) ** 2 + (sword[1] - self.y) ** 2) ** 0.5
        
        # Sprawdź czy myszka jest w zasięgu owocu
        if distance <= self.radius + 3 and not self.is_already_sliced and is_clicked:
            self.is_already_sliced = True
            if self.is_bomb:
                return True  # Bomba
            else:
                score_manager.add_points(100)
                self.generate_particles()
                return False  # Owoc
        return None
        
    def generate_particles(self):
        for i in range(random.randint(3, 6)):
            self.particles.append(Particle(self.x, self.y, self.color, self.speed_x, self.speed_y))

    def is_off_screen(self, screen_height):
        return self.y > screen_height
