from peewee import *

from src.model.BaseModel import BaseModel
from src.model.Crew import Crew
from src.model.User import User
from src.model.enums.devil_fruit.DevilFruitAbilityType import DevilFruitAbilityType


class CrewAbility(BaseModel):
    """
    CrewAbility class
    """

    crew = ForeignKeyField(Crew, backref="crew_abilities")
    ability_type = SmallIntegerField()
    value = SmallIntegerField()
    acquired_method = SmallIntegerField()
    acquired_user = ForeignKeyField(User, backref="crew_abilities_acquired", null=True)
    expiration_date = DateTimeField(null=True)
    was_removed = BooleanField(default=False)
    removed_user = ForeignKeyField(User, backref="crew_abilities_removed", null=True)

    class Meta:
        db_table = "crew_ability"

    def get_ability_type(self):
        """
        Returns the ability type
        :return: The ability type
        """
        return DevilFruitAbilityType(self.ability_type)

    def get_description(self):
        """
        Returns the description of the ability
        :return: The description
        """
        return self.get_ability_type().get_description()

    def get_value_with_sign(self):
        """
        Returns the value with sign
        :return: The value with sign
        """
        return self.get_ability_type().get_sign() + str(self.value)


CrewAbility.create_table()
