import arcade
from utils.constants import SHAPES, CELL_SIZE, OUTLINE_WIDTH

class Shape():
    def __init__(self, x, y, shape_type, shape_color, sprite_list: arcade.SpriteList):
        self.x = x
        self.y = y
        self.sprite_list = sprite_list
        self.shape_type = shape_type
        self.shape_color = shape_color
        self.tiles = []

        self.setup_grid()

    def update(self, shape, color, x=None, y=None):
        if x:
            self.x = x
        if y:
            self.y = y

        self.shape_type = shape
        self.shape_color = color

        n = 0

        for tile in self.tiles:
            tile.visible = False

        for offset_col, offset_row in SHAPES[self.shape_type]:
            tile_x = self.x + (offset_col * (CELL_SIZE + OUTLINE_WIDTH))
            tile_y = self.y + (offset_row * (CELL_SIZE + OUTLINE_WIDTH))

            if n < len(self.tiles):
                self.tiles[n].position = tile_x, tile_y, 0
                self.tiles[n].color = color
                self.tiles[n].visible = True
            else:
                self.tiles.append(arcade.SpriteSolidColor(width=CELL_SIZE, height=CELL_SIZE, color=color, center_x=tile_x, center_y=tile_y))
                self.sprite_list.append(self.tiles[-1])

            n += 1

    def setup_grid(self):
        for offset_col, offset_row in SHAPES[self.shape_type]:
            x = self.x + (offset_col * (CELL_SIZE + OUTLINE_WIDTH))
            y = self.y + (offset_row * (CELL_SIZE + OUTLINE_WIDTH))
            self.tiles.append(arcade.SpriteSolidColor(width=CELL_SIZE, height=CELL_SIZE, color=self.shape_color, center_x=x, center_y=y))
            self.sprite_list.append(self.tiles[-1])
