# Path: managers/echo.py
# class EchoService(object):
# class MessageVariables(Enum):
#     def __init__(self, console, game_context):
#     def combat_context_echo(self, message, attacker=None, defender=None,
#                             attacker_weapon=None, defender_weapon=None, defender_bodypart=None):
# def his_her_it(target, **kwargs):
# def him_her_it(target, **kwargs):
# def he_her_it(target, **kwargs):
# def name_or_you(target, **kwargs):


import abc
from managers import echo
        self.description = description
        self.message = message
        self.requirements = requirements

    @abc.abstractmethod
    def evaluate(self, defender, hit_roll):
        pass

    def _evaluate(self, hit_roll, minimum_ac, maximum_ac):
        if minimum_ac <= hit_roll <= maximum_ac:
            return True
        return False

    def make_defense(self, attacker, defender, **kwargs):
        echo.EchoService.singleton.combat_context_echo(
            message="..." + self.message,
            attacker=attacker,
            defender=defender,
            **kwargs
        )

    def get_used_weapon(self, defender):
        return next((weapon for weapon in defender.equipment.get_wielded_items()))


class MissTemplate(DefenseTemplate):
    def __init__(self, name, description, message, requirements=None):
        super().__init__(name, description, message, requirements)

    def evaluate(self, defender, hit_roll):

# Path: managers/echo.py
# class EchoService(object):
# class MessageVariables(Enum):
#     def __init__(self, console, game_context):
#     def combat_context_echo(self, message, attacker=None, defender=None,
#                             attacker_weapon=None, defender_weapon=None, defender_bodypart=None):
# def his_her_it(target, **kwargs):
# def him_her_it(target, **kwargs):
# def he_her_it(target, **kwargs):
# def name_or_you(target, **kwargs):


# Path: combat/defense.py
import abc
from managers import echo

        self.description = description
        self.message = message
        self.requirements = requirements

    @abc.abstractmethod
    def evaluate(self, defender, hit_roll):
        pass

    def _evaluate(self, hit_roll, minimum_ac, maximum_ac):
        if minimum_ac <= hit_roll <= maximum_ac:
            return True
        return False

    def make_defense(self, attacker, defender, **kwargs):
        echo.EchoService.singleton.combat_context_echo(
            message="..." + self.message,
            attacker=attacker,
            defender=defender,
            **kwargs
        )

    def get_used_weapon(self, defender):
        return next((weapon for weapon in defender.equipment.get_wielded_items()))


class MissTemplate(DefenseTemplate):
    def __init__(self, name, description, message, requirements=None):
        super().__init__(name, description, message, requirements)

    def evaluate(self, defender, hit_roll):

        if hit_roll <= 10: