import random


DATA = {
    "Локация": {
        "Ядерная война": {
            'Описание': 'Прошла ядерная война, везде радиация, пыль окутала планету и не видно солнечного света, началась ядерная зима. После выхода из бункера проблемы с почвой и водой, на земле суммарно осталось около 2млн человек',
            'Профессии': ['Иммунолог', 'Агроном']
        }, "Нашествие демонов": {
            'Описание': 'Темнота, демоны оружием не убиваются',
            'Профессии': ['Священник', 'Экзорцист']
        }, "Эпидемия": {
            'Описание': 'Заражена почва, Мутации организмов',
            'Профессии': ['Вирусолог', 'Геолог']
        },
        'Восстание растений':{
            'Описание': 'Растения выращивать нельзя, вне бункера очень опасно. Желательно инженер, который будет чинить бункер от злых корней',
        }
    }, "Бункер": [    #2 рандомные вещи
        'Библиотека', 'Компьютер', 'Теплица', 'Пособие для изучения ин языков',
        'Баскетбольный корт',
        'тату студия',
        'кинотеатр',
        'Акушерский кабинет',
        'Выставка современного исскусства',
        'Прачечная',
        'Оружие без патронов',
        'Оружие с патронами',
        'Лгбт флаг',
        'Вонючий туалет',
        'Нет туалета',
        'Крысы',
    ], "Профессия": [
        'Безработный',
        'Иммунолог', 'Вирусолог', 'Эколог',
        'Хирург', 'Стоматолог', 'Медсестра', 'Уролог', 'Гинеколог', 'Проктолог', 'Психолог', 'Сэксолог',
        'Священник', 'Экзорцист', 
        'Агроном', 'Геолог', 'Геодезист', 'Археолог', 'Эколог', 'Садовник', 
        'Адвокат', 'Юрист', 'Бухгалтер', 'Маркетолог', 'Судья', 
        'Бармен', 'Оффициант', 'Стюардесса', 'Педагог', 'Продавец', 'Клоун', 'Фотограф', 'Охотник', 'Дровосек', 'Гонщик', 'Повар', 'Заводчик шпецов', 'Скупщик автомобилей', 'Пивовар',
        'Программист', 'Инженер-электрик', 'Инженер-строитель', 'Инженер-телекоммуникаций', 'Водитель-таксист', 'Водитель-дальнобойщик',
        'Ученый', 'Шахтер', 'Сварщик', 'Ювелир', 'Кузнец',
        'Спасатель', 'Военный', 'Полицейский', 'Пожарный', 'Охранник', 'Сталевар',
        'Протестующий афроамериканец',
        'Наездник',
    ], "Багаж": [
        'Компьютер', 'Молоток', 'Набор для пивоварения', 'Нинтендо свитч', 'Калик', 'Наручники для БДСМ',
        'Черный ребенок',
        'Конфеты из Гарри-Поттера со вкусом ушной серы',
        'Матрешка Тотторо',
        'Противогаз',
        'Пестициды',
        'Набор для маникюра',
        'Кегли',
        'Пакет с пакетами',
        'Смарт часы',
        'Промокод Яндекс еды',
        'Книга разумный инвестор Уоррена Баффета',
        'Скейтборд',
        'Шприц с адреналином',
        'Нурофен',
        'Лекарство от шизы на пол года',
        '100 баксов',
        'Резинка для волос',
        'Гандон',
        'Бита',
        'Секатор',
        'Консервы на неделю',
        'Машинка для татуировки',
        'Ручная крыса',
        'Линекс',
    ], "Состояние здоровья": [      #Выбирается степень тяжести
        'Идеально здоров',
        'Идеально здоров',
        'Идеально здоров',
        'Идеально здоров',
        'Идеально здоров', 'Рак легких', 'Рак желудка', 'Косоглазие', 'Астма', 'Шизофрения', 'Алкоголик', 'Безрукий', 'Безногий', 
        'Синдром слабого желудка',
        'Диарея',
        'Булемия',
        'Анорексия',
        'Несветываемость крови',
        'Мигрень',
        'Щелкающая нога',
        'Непереносимость сильных запахов',
        'Ухудшение памяти',
        'Волосатость',

    ],  
    "Биологическая характеристика": ['Женщина', 'Мужчина'],  #Дл якаждой на рандоме выбирается бесплоден ли, сколько лет    -   параметры рост вес
    'Хобби': [
        'Скейтборбинг', 'Игра на пианино', 'Рыбалка', 'Изучал составы различных жидкостей', 'Гребля на каное', 'Футболист',
        'Художественная гимнастика',
        'космонавт',
        'ветеринар',
        'Наблюдение за птицами',
        'Хожу в общественные бани, чтобы помыть жопу',
        ],    #Выбирается стаж
    'Человеческое качество': ['Замкнутый', 'Упорный', 'Ленивый', 'Нимфоман', 'Плаксивый', 'Безкомпромисный',
        'Феминизм',
        'Тупой',
        'Гений',
        'Пунктуальный',
        'Непунктуальный',
        'Терпеливый',
        'Нетерпеливый',
        'Злой',
        'Добрый',
        'Воняет',
        'Трансгендер',
        'Гей',
        'Транснигер',
        'Нигер',
        'Стукач',
        'Милосердный',
        'Задрот',
        'Фанатик',
        'Дрочила',
        'Ботан',
        'Гопник',
        'Великодушный',
        'Немногозадачный',
        'Многозадачность',
    ],    #Выбирается выраженность
    'Фобия': ['нет', 'Боязнь темноты', 'Боязнь света', 'Боязнь клоунов', 'Боязнь священников', 'Страх выступлений на публику',
        'Боязнь Книг',
        'Боязнь Техники',
        'Боязнь мужчин',
        'Боязнь женщин',
        'Боязнь чернокожих',
        'Ненависть к лгбт',

    ],
    'Дополнительный навык': [
        'Уролог', 'Гинеколог', 'Занимался боевыми исскусствами', 'В детстве занимался в музыкалке',
        'Знаю серьезных дадек',
    ], 'Карточки': [
        'Изменить профессию у себя', 'Изменить профессию у выбранного человека', 'Изменить профессию у всех',
        'Поменяться здоровьем c другим человеком', 'Заменить всем здоровье', 'Вылечить другого игрока', 'Вылечить себя',
        'Заменить всем Биологическую характеристику', 'Заменить биологическую характеристику себе', 'Заменить биологическую характеристику выбранному игроку', 
        'Заменить всем параметры', 'Заменить параметры себе', 'Заменить параметры другому человеку',
        'Возможность кинуть 2 голоса',
    ],   #Для каждого выбирается 2 карты
}


# первый круг - профессия и 2 харки на выбор = 3 характеристики
# когда вскрываете пол, вскрываете и возраст и стаж
# если сильное ожирение - не может иметь потомство
# нельзя понтануться картой - если говоришь собержание -> юзаешь её
"""
ухудшение памяти
ветеринар
в бункере крысы
наблюдение за птицами
окушер гинеколог
библиотекарь
великодушный
Знаю серьезных дядек
космонавт

"""

# первый круг --> голосование за выкид

# добавить братские узы
# добавить врагов
# поднимаем пальцы, сколько в тебя проголосовало
# после раскидывания голосов, можно перенести голос




class Player:
    """
    profession: list -->    ['название', 'стаж']                    [str, int]
    health: list -->        ['название болезни', 'степень']         [str, str]
    bio: list -->           ['муж', 'возраст', 'бесплоден ли']      ['Мужчина'/'Женщина', int, bool]
    hobby: list -->         ['название', 'стаж']                    [str, int]
    quality: list -->       ['название', 'степень выраженности']    [str, int]
    cards: list -->         ['Первая карта', 'Вторая карта']        [str, str]
    """

    def __init__(self):
        self.change_bio()
        self.change_parameters()
        self.change_profession()
        self.change_health()
        self.change_quality()
        self.change_phobia()
        self.change_bagage()
        self.change_hobby()
        self.change_skill()
        
        first_card = random.choice(DATA['Карточки'])
        loc_data = []
        loc_data.extend(DATA['Карточки'])
        loc_data.remove(first_card)
        second_card = random.choice(loc_data)
        self.cards = [first_card, second_card]

    def __str__(self):
        str_card = f"{self.bio[0]} - {self.bio[1]} лет - {'Бесплоден' if self.bio[2] else 'Может иметь потомство'}\nРост - {self.parameters[0]}   Вес - {self.parameters[1]}\n{self.profession[0]}\n\tСтаж {self.profession[1]} лет\n"
        str_card += f"{self.health[0]} - степень {self.health[1]} %\nЧеловеческие качества:\n\t{self.quality[0][0]} - выражено на {self.quality[0][1]} %\n\t{self.quality[1][0]} - выражено на {self.quality[1][1]} %\n"
        str_card += f"Фобия: {self.phobia}\nДополнительный навык: {self.skill}\nХобби: {self.hobby[0]} - {self.hobby[1]} лет\n"
        str_card += f"Багаж: {self.bagage}\n\nПервая карточка: {self.cards[0]}\n\nВторая карточка: {self.cards[1]}"

        return str_card

    def get_json(self):
        js = {
            'bio': self.bio,
            'parameters': self.parameters,
            'profession': self.profession,
            'health': self.health,
            'quality': self.quality,
            'phobia': self.phobia,
            'skill': self.skill,
            'hobby': self.hobby,
            'bagage': self.bagage,
            'cards': self.cards
        }
        return js

    def change_profession(self, profession: list = None, swap=False):
        """Если передана профессия и параметр обменяться, то возващает текущую профессию
        """
        if profession is not None and swap:
            self.profession, profession = profession, self.profession
            return profession
        elif profession is not None and not swap:
            self.profession = profession
        else:
            self.profession = [random.choice(DATA['Профессия']), random.randint(0, self.bio[1] - 18)]
        return self.profession

    def change_health(self, health: list=None, swap=False):
        """Если передано здоровье и параметр обменяться, то возващает текущее здоровье
        """
        if health is not None and swap:
            self.health, health = health, self.health
            return health
        elif health and not swap:
            self.health = health
        else:
            self.health = [random.choice(DATA['Состояние здоровья']), random.randint(1, 100)]
        return self.health

    def make_full_health(self):
        self.health = ['Идеально здоров', 100]
        return self.health

    def change_bio(self):
        self.bio = [random.choice(DATA['Биологическая характеристика']), random.randint(18, 90), random.choice([True, True, True, False])]
        return self.bio

    def change_parameters(self):
        self.parameters = [random.randint(140, 230), random.randint(40, 150)]
        return self.parameters

    def change_quality(self):
        self.quality = [[random.choice(DATA['Человеческое качество']), random.randint(1, 100)],
                        [random.choice(DATA['Человеческое качество']), random.randint(1, 100)]]
        return self.quality

    def change_phobia(self):
        self.phobia = random.choice(DATA['Фобия'])
        return self.phobia

    def change_bagage(self):
        self.bagage = random.choice(DATA['Багаж'])
        return self.bagage

    def change_hobby(self):
        self.hobby = [random.choice(DATA['Хобби']), random.randint(0, self.bio[1] - 18)]
        return self.hobby

    def change_skill(self):
        self.skill = random.choice(DATA['Дополнительный навык'])
        return self.skill