import os
from pygame import image
import pygame
import pygame.transform


class Projectile:
    UP = "up"
    DOWN = "down"
    LEFT = "left"
    RIGHT = "right"

    def __init__(self, game, x, y, direction: str):
        self.game = game
        self.settings = self.game.settings

        self.x = x
        self.y = y
        self.direction = direction

        self.h, self.w = self.settings.projectile_size, self.settings.projectile_size

        self.image = image.load(os.path.join(self.settings.img_folder, "tanks", "explotions", "shot", self.direction + ".png"))
        self.image = pygame.transform.scale(self.image, (self.settings.projectile_size, self.settings.projectile_size))
    
    def move(self):
        if self.direction == self.UP:
            self.y -= self.settings.projectile_speed
        elif self.direction == self.DOWN:
            self.y += self.settings.projectile_speed
        elif self.direction == self.LEFT:
            self.x -= self.settings.projectile_speed
        elif self.direction == self.RIGHT:
            self.x += self.settings.projectile_speed
    
    def update(self):
        self.move()
        self.game.screen.blit(self.image, (self.x, self.y))

    def change_coords_by_delta(self, dx=None, dy=None):
        self.x = self.x - dx
        self.y = self.y - dy
    
    def get_check_points(self):
        result = None
        if self.direction == self.UP:
            result = (
                (self.x + 1, self.y),
                (self.x + self.w - 1, self.y)
            )
        elif self.direction == self.DOWN:
            result = (
                (self.x + 1, self.y + self.h),
                (self.x + self.w - 1, self.y + self.h)
            )
        elif self.direction == self.LEFT:
            result = (
                (self.x, self.y + 1),
                (self.x, self.y + self.h - 1)
            )
        elif self.direction == self.RIGHT:
            result = (
                (self.x + self.w, self.y + 1),
                (self.x + self.w, self.y + self.h - 1)
            )
        
        return result