from flask import Flask, render_template, request

class BaldursGateQuizApp:
    def __init__(self):
        self.app = Flask(__name__, template_folder="templates", static_folder="static")
        self.add_routes()

    def add_routes(self):
        self.app.add_url_rule('/', 'index', self.index)
        self.app.add_url_rule('/result', 'result', self.result, methods=["POST"])
        self.app.add_url_rule('/tests', 'tests', self.tests)
        self.app.add_url_rule('/about', 'about', self.about)

    def index(self):
        return render_template("index.html")

    def tests(self):
        return render_template("tests.html")

    def result(self):
        answers = request.form
        character = self.determine_character(answers)
        return render_template("result.html", character=character)

    def about(self):
        return render_template("about.html")

    @staticmethod
    def determine_character(answers):
        traits = {
            "brave": "Минск",
            "wise": "Гейл",
            "kind": "Карлах",
            "cunning": "Астарион",
            "strict": "Лаэзель",
            "dark": "Шэдоухарт"
        }
        roles = {
            "leader": "Минск",
            "healer": "Хальсин",
            "fighter": "Карлах",
            "rogue": "Астарион",
            "mage": "Гейл"
        }
        goals = {
            "glory": "Минск",
            "knowledge": "Гейл",
            "protect": "Шэдоухарт",
            "power": "Лаэзель"
        }
        rules = {
            "strict": "Лаэзель",
            "flexible": "Гейл",
            "pragmatic": "Астарион",
            "chaotic": "Шэдоухарт"
        }
        weapons = {
            "sword": "Минск",
            "staff": "Гейл",
            "dagger": "Астарион",
            "mace": "Карлах",
            "bow": "Лаэзель"
        }
        places = {
            "tavern": "Карлах",
            "library": "Гейл",
            "wilderness": "Хальсин",
            "castle": "Лаэзель",
            "dark_alley": "Шэдоухарт"
        }
        mood_fix = {
            "training": "Лаэзель",
            "reading": "Гейл",
            "adventure": "Минск",
            "meditation": "Шэдоухарт",
            "drinking": "Карлах"
        }
        colors = {
            "red": "Карлах",
            "blue": "Гейл",
            "green": "Хальсин",
            "black": "Шэдоухарт",
            "gold": "Лаэзель"
        }

        choices = [
            traits.get(answers.get("question1")),
            roles.get(answers.get("question2")),
            goals.get(answers.get("question3")),
            rules.get(answers.get("question4")),
            weapons.get(answers.get("question5")),
            places.get(answers.get("question6")),
            mood_fix.get(answers.get("question7")),
            colors.get(answers.get("question8"))
        ]
        
        choices = [choice for choice in choices if choice is not None]
        
        if not choices:
            return {"name": "Неизвестно", "image": "unknown.jpg", "description": "Не удалось определить персонажа."}
        
        most_common = max(set(choices), key=choices.count)
        
        characters_info = {
            "Минск": {"name": "Минск", "image": "minsk.jpg", "description": "Герой, идущий напролом с верным хомяком Бу"},
            "Гейл": {"name": "Гейл", "image": "gale.jpg", "description": "Могущественный маг, жаждущий знаний и силы"},
            "Карлах": {"name": "Карлах", "image": "karlach.jpg", "description": "Добрая, но грозная воительница"},
            "Астарион": {"name": "Астарион", "image": "astarion.jpeg", "description": "Хитрый вампир, любящий свободу"},
            "Лаэзель": {"name": "Лаэзель", "image": "laezel.jpg", "description": "Жесткая и бескомпромиссная гитянка-воительница"},
            "Шэдоухарт": {"name": "Шэдоухарт", "image": "shadowheart.jpg", "description": "Таинственная жрица с темным прошлым"},
            "Хальсин": {"name": "Хальсин", "image": "halsin.jpg", "description": "Мудрый друид, защитник природы."}
        }

        return characters_info.get(most_common, {"name": "Неизвестно", "image": "unknown.jpg", "description": "Не удалось определить персонажа."})
    
    def run(self):
        self.app.run(debug=True, host="0.0.0.0", port=5000)

if __name__ == "__main__":
    app_instance = BaldursGateQuizApp()
    app_instance.run()
