import pygame
from Kierunek import Kierunek
from Segment import Segment
import copy

class Waz(pygame.sprite.Sprite):
    def __init__(self):
        #oryginalny obraz glowy
        self.oryginalny_obraz = pygame.image.load("images/head.png")
        #obraz pomocniczny, bedzie sie on zmienial przy zmienie kierunku gracza
        self.obraz = pygame.transform.rotate(self.oryginalny_obraz, 0)
        #wspolrzednie glowy
        self.rect = self.obraz.get_rect(center=(12*32+16, 9*32+16))
        #zmienne odpowiedzialne za kierunek, oraz nowy wyznaczony kierunek
        self.kierunek = Kierunek.GORA
        self.nowy_kierunek = Kierunek.GORA
        self.ostatnia_pozycja=self.rect
        self.dodaj_segment=False
        self.segment=[]

    def zmien_kierunek(self, kierunek):
        zmiana_mozliwa = True
        if kierunek == Kierunek.GORA and self.kierunek == Kierunek.DOL:
            zmiana_mozliwa = False
        if kierunek == Kierunek.DOL and self.kierunek == Kierunek.GORA:
            zmiana_mozliwa = False
        if kierunek == Kierunek.LEWO and self.kierunek == Kierunek.PRAWO:
            zmiana_mozliwa = False
        if kierunek == Kierunek.PRAWO and self.kierunek == Kierunek.LEWO:
            zmiana_mozliwa = False
        if zmiana_mozliwa: 
            self.nowy_kierunek = kierunek

    def aktualizuj(self):
        self.kierunek = self.nowy_kierunek
        self.obraz = pygame.transform.rotate(self.oryginalny_obraz, (self.kierunek.value*-90))
        self.ostatnia_pozycja=copy.deepcopy(self.rect)

        if self.kierunek == Kierunek.GORA:
            self.rect.move_ip(0, -32)
        if self.kierunek == Kierunek.PRAWO:
            self.rect.move_ip(32, 0)
        if self.kierunek == Kierunek.LEWO:
            self.rect.move_ip(-32, 0)
        if self.kierunek == Kierunek.DOL:
            self.rect.move_ip(0, 32)
        for i in range(len(self.segment)):
            if i==0:
                self.segment[i].przesun(self.ostatnia_pozycja)
            else:
                self.segment[i].przesun(self.segment[i-1].ostatnia_pozycja)
        if self.dodaj_segment:
            nowy_segment=Segment()

            nowa_pozycja=None
            if len(self.segment)>0:
                nowa_pozycja=copy.deepcopy(self.segment[-1].pozycja)
            else:
                nowa_pozycja=copy.deepcopy(self.ostatnia_pozycja)
            nowy_segment.pozycja=nowa_pozycja
            self.segment.append(nowy_segment)
            self.dodaj_segment=False

    def rysuj_segment(self,ekran):
        for segment in self.segment:
            ekran.blit(segment.obraz,segment.pozycja)
    
    def sprawdz_kolizje(self):
        for segment in self.segment:
            if self.rect.topleft==segment.pozycja.topleft:
                return True
        if self.rect.top<0 or self.rect.top>=608:
            return True
        if self.rect.left<0 or self.rect.top>=800:
            return True
        return False
    
    def jedz_jablko(self):
        self.dodaj_segment=True


