from django.db import models


LEVEL_CHOICES = (
    ('0', 'Terrible'),
    ('1', 'Poor'),
    ('2', 'Mediocre'),
    ('3', 'Fair'),
    ('4', 'Good'),
    ('5', 'Great'),
    ('6', 'Superb'),
)


class Character(models.Model):
    name = models.CharField(max_length=64)
    short_description = models.CharField(max_length=128)
    description = models.TextField()

    def skills(self):
        return self.skill_list.all()

    def attributes(self):
        return self.attribute_list.all()

    def traits(self):
        return self.trait_list.all()

    def get_absolute_url(self):
        return "/characters/%s" % (self.id,)

    def __str__(self):
        return self.name

    class Admin:
        pass


class Trait(models.Model):
    name = models.CharField(max_length=64)
    slug = models.SlugField(prepopulate_from=['name'])
    description = models.TextField()
    character = models.ForeignKey(Character, related_name="trait_list")

    def get_absolute_url(self):
        return "/characters/traits/%s" % (self.slug,)

    def __str__(self):
        return self.name

    class Admin:
        pass


class Attribute(models.Model):
    name = models.CharField(max_length=64)
    slug = models.SlugField(prepopulate_from=['name'])
    description = models.TextField()

    def get_absolute_url(self):
        return "/characters/attributes/%s" % (self.slug,)

    def __str__(self):
        return self.name

    class Admin:
        pass


class CharacterAttribute(models.Model):
    character = models.ForeignKey(Character, related_name="attribute_list")
    attribute = models.ForeignKey(Attribute)
    level = models.CharField(max_length=1, choices=LEVEL_CHOICES)

    def __str__(self):
        return self.level

    class Admin:
        pass


class SkillClass(models.Model):
    name = models.CharField(max_length=64)
    slug = models.SlugField(prepopulate_from=['name'])
    description = models.TextField()

    def skills(self):
        return self.skill_set.all()

    def get_absolute_url(self):
        return "/characters/skill_classes/%s" % (self.slug,)

    def __str__(self):
        return self.name

    class Admin:
        pass


class Skill(models.Model):
    name = models.CharField(max_length=64)
    slug = models.SlugField(prepopulate_from=['name'])
    description = models.TextField()
    skill_class = models.ForeignKey(SkillClass)
    default_level = models.CharField(max_length=1, choices=LEVEL_CHOICES)

    def get_absolute_url(self):
        return "/characters/skills/%s" % (self.slug,)

    def __str__(self):
        return self.name

    class Admin:
        pass


class CharacterSkill(models.Model):
    character = models.ForeignKey(Character, related_name="skill_list")
    skill = models.ForeignKey(Skill)
    level = models.CharField(max_length=1, choices=LEVEL_CHOICES)

    def __str__(self):
        return self.level

    class Admin:
        pass

