import random, time, os
from helpers import Dice  
from items import *
from characters import *

class Location:
    def __init__(self, name, description, characters, items):
        self.name = name
        self.description = description
        self.characters = characters  # lista klas potworów
        self.items = items  # lista możliwych przedmiotów
        self.actions = {
            "explore": self.explore,
            "rest": self.rest,
           # "use_item": player.use_item
           "leave" : self.leave,
        }

    def enter(self, player):
        self.player = player
        self.actions["inventory"] = self.player.use_item
        print('Miejsce: ' + self.description)

        while True:
            print('Dostępne opcje:')
            for option in self.actions.keys():
                print(f"- {option}")
            choice = input("Wybierz opcję: ")
            while choice not in self.actions:
                print("Nieprawidłowy wybór.")
                choice = input("Wybierz opcję: ")
            if self.actions[choice]():
                break

    def leave(self):
        return True

    def rest(self):
        print("Odpoczywasz i odnawiasz siły.")
        self.player.hp += 10
        if self.player.hp > self.player.max_hp:
            self.player.hp = self.player.max_hp

    def explore(self):
        dice_roll = Dice.roll(6)
        if dice_roll <= 3 and self.characters:
                os.system('cls')
                enemy_class = random.choice(self.characters)
                self.characters.remove(enemy_class)
                enemy = enemy_class()
                print(f"Napotykasz wroga: {enemy.name}!")
                time.sleep(1)
                self.player.fight(enemy)
                if not self.player.is_alive():
                    return True #break the loop

        elif dice_roll <= 5 and self.items:
                os.system('cls')
                item = random.choice(self.items)
                print(f"Znalazłeś przedmiot: {item.name}!")
                self.player.inventory.append(item)
                self.items.remove(item)
                time.sleep(1)

        else:
            print(random.choice(["Nic tu nie ma?", "Gwiżdże wiatr", "Cykanie świerszczy...", "Hop hop!", "Echooo!"]))

    def __str__(self):
        return self.name
    
    def __repr__(self):
        return self.__str__()

# Definicje lokacji
road = Location(
    "Trakt",
    "Droga na Północ. Dziś pusta i cicha.",
    [],
    []
)

village = Location(
    "Wioska",
    "Spokojna wioska. Możesz odpocząć.",
    [Orc],  # brak potworów
    [Potion(), Potion()]
)

forest = Location(
    "Las",
    "Gęsty las pełen goblinów.",
    [Goblin, Goblin, Orc],  # częściej gobliny
    [Potion(), Weapon("Łuk", 1)]
)

cave = Location(
    "Jaskinia",
    "Ciemna jaskinia. Czujesz zapach orków.",
    [Orc, Orc, Goblin],  # częściej orki
    [Potion(), Weapon("Topór", 3)]
)

catedral = Location(
    "Katedra przodków",
    "Święta katedra przodków. W powietrzu czuć magię.",
    [Skeleton],
    [Potion(), Potion()]
)
