import os  # для работы с файлами (спрайтами)
import random  # Для рандомных значений
import pygame  # Сам PyGame для отрисовки всего

WIDTH = 600
HEIGHT = 600
FPS = 5

WHITE = (255, 255, 255)
ORANGE = (255, 125, 0)
BALACK = (0, 0, 0)

pygame.init()
pygame.mixer.init()
display = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("PatrickGame")
clock = pygame.time.Clock()

# СПРАЙТ ЛОАДЕРЫ
my_dir = os.path.dirname(__file__)
self_img = os.path.join(my_dir, "img")


def load_sprite(filename, size):
    """Безопасная загрузка спрайтов с заглушкой на случай отсутствия файлов"""
    path = os.path.join(self_img, filename)
    if os.path.exists(path):
        img = pygame.image.load(path)
        return pygame.transform.scale(img, size)
    else:
        # Если картинки нет, создаем цветной квадрат, чтобы код не падал
        surf = pygame.Surface(size)
        surf.fill((random.randint(50, 255), 100, random.randint(50, 255)))
        return surf


load = load_sprite("img.png", (300, 300))  # основной спрайт персонажа
load0 = load_sprite("img.png", (300, 300))  # спящий спрайт
load1 = load_sprite("img.png", (300, 300))  # счастливый спрайт
load2 = load_sprite("img_1.png", (300, 300))  # грустный спрайт
load3 = load_sprite("img.png", (300, 300))  # голодный спрайт
load4 = load_sprite("img.png", (300, 300))  # испытывающий жажду спрайт
load5 = load_sprite("img_2.png", (100, 100))  # еда
load6 = load_sprite("img_4.png", (100, 100))  # вода


# РАЗНОВИДНОСТИ ТАМОГОЧИ И КЛАССЫ
class BaseTamogochi(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = load
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)


class HappyTamogochi(BaseTamogochi):

    def __init__(self):
        super().__init__()
        self.image = load1  # Исправлено на load1 (счастливый)


class SadTamogochi(BaseTamogochi):

    def __init__(self):
        super().__init__()
        self.image = load2  # Исправлено на load2 (грустный)


class HungredTamogochi(BaseTamogochi):

    def __init__(self):
        super().__init__()
        self.image = load3  # Исправлено на load3 (голодный)


class ThirstyTamogochi(BaseTamogochi):

    def __init__(self):
        super().__init__()
        self.image = load4  # Исправлено на load4 (жажда)


class SleepyTamogochi(BaseTamogochi):

    def __init__(self):
        super().__init__()
        self.image = load0  # Исправлено на load0 (спящий)


# ЕДА
class Food(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = load5  # еда
        self.rect = self.image.get_rect()
        self.rect.center = (500, 300)

    def feed(self):
        global hungry
        key = pygame.key.get_pressed()
        if key[pygame.K_e]:
            hungry -= food_give
            if hungry < 0:
                hungry = 0

    def chek_click(self, mouse_pos):
        if self.rect.collidepoint(mouse_pos):
            self.on_click()

    def on_click(self):
        global hungry  # Добавлено для доступа к глобальной переменной
        hungry -= food_give
        if hungry < 0:
            hungry = 0


# ВОДА
class Water(pygame.sprite.Sprite):

    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = load6  # ВОДА
        self.rect = self.image.get_rect()
        self.rect.center = (100, 300)

    def drink(self):
        global thirsty
        key = pygame.key.get_pressed()
        if key[pygame.K_q]:
            thirsty -= water_give
            if thirsty < 0:
                thirsty = 0

    def chek_click(self, mouse_pos):  # Добавлен метод клика для воды
        if self.rect.collidepoint(mouse_pos):
            global thirsty
            thirsty -= water_give
            if thirsty < 0:
                thirsty = 0


# НАСТРОЙКИ физики
tamgoch = BaseTamogochi()
happy = HappyTamogochi()
sad = SadTamogochi()
sleep = SleepyTamogochi()
thirst = ThirstyTamogochi()
hunger = HungredTamogochi()
burger = Food()
water = Water()

base_otrisovka = pygame.sprite.Group(tamgoch)
happy_otrisovka = pygame.sprite.Group(happy)
sad_otrisovka = pygame.sprite.Group(sad)
sleep_otrisovka = pygame.sprite.Group(sleep)
thirst_otrisovka = pygame.sprite.Group(thirst)
hunger_otrisovka = pygame.sprite.Group(hunger)
burger_otrisovka = pygame.sprite.Group(burger)
water_otrisovka = pygame.sprite.Group(water)

happiness = 100
saddness = 0
sleepy = 0
thirsty = 0
hungry = 0
food_give = random.randint(10, 100)
water_give = random.randint(10, 100)

running = True
while running:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == 1:
                burger.chek_click(event.pos)
                water.chek_click(event.pos)  # Теперь работает и клик по воде

    # Проверка зажатия клавиш "E" и "Q"
    burger.feed()
    water.drink()

    # Естественное изменение показателей
    happiness -= 1
    saddness += 1
    sleepy += 1
    thirsty += 1
    hungry += 1

    # Защита показателей от ухода в минус
    if hungry < 0:
        hungry = 0
    if thirsty < 0:
        thirsty = 0

    display.fill(ORANGE)

    # ОПРЕДЕЛЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ (Устранено наслоение текстур)
    if hungry >= 50:
        hunger_otrisovka.draw(display)
    elif thirsty >= 50:
        thirst_otrisovka.draw(display)
    elif sleepy >= 50:
        sleep_otrisovka.draw(display)
    elif saddness >= 50:
        sad_otrisovka.draw(display)
    elif happiness <= 40:
        happy_otrisovka.draw(display)
    else:
        base_otrisovka.draw(display)

    burger_otrisovka.draw(display)
    water_otrisovka.draw(display)

    pygame.display.flip()

pygame.quit()
