from django.db import models

from django.conf import settings
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location=settings.PRIVATE_FILES)


class CPDCategory(models.Model):

    title = models.CharField(max_length=200)
    order = models.IntegerField()

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['order',]

    def get_items(self):
        items = CPDItem.objects.filter(category=self)
        return items

    def get_enabled_items(self):
        items = CPDItem.objects.filter(category=self, enabled=True)
        return items


class CPDItem(models.Model):

    TYPE_CHOICES = (
        (u'compulsory', u'Compulsory Element'),
        (u'optional', u'Optional Element'),
    )

    category = models.ForeignKey('CPDCategory')

    name = models.CharField(max_length=200)
    cpd_points = models.IntegerField()
    order = models.IntegerField()
    enabled = models.BooleanField(default=True)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['order',]


class CPDSubmission(models.Model):

    LEARNING_TYPE_CHOICES = (
        ('Educational', 'Educational'),
        ('Professional', 'Professional'),
        ('Work Based', 'Work Based'),
        ('Self Directed', 'Self Directed'),
    )

    member = models.ForeignKey('members.Member')
    cpd_item = models.ForeignKey('CPDItem', blank=True, null=True)
    created = models.DateTimeField(auto_now_add=True)
    approved = models.BooleanField(default=False)

    date = models.DateField()
    cpd_category = models.ForeignKey('CPDCategory', blank=True, null=True, default=None)
    activity_name = models.CharField(max_length=200)
    points_value = models.IntegerField(default=0)
    evidence = models.FileField(storage=fs, upload_to='cpd', blank=True, null=True,
                                help_text='Please upload any Evidence (PDF file or similar) to support this CPD application.', verbose_name='Evidence (Old)')

    type_of_learning = models.CharField(max_length=200, blank=True, null=True, choices=LEARNING_TYPE_CHOICES)
    benefits_to_own_practice = models.TextField(blank=True, null=True)
    benefits_to_service_user = models.TextField(blank=True, null=True)

    def __unicode__(self):
        return "%s %s" % (self.member, self.activity_name)

    class Meta:
        ordering = ['-date',]

    def get_evidence(self):
        return CPDSubmissionEvidence.objects.filter(submission=self)

    def is_avs(self):
        if self.member.get_avs():
            if self.member.avs_date:
                if self.date >= self.member.avs_date:
                    return True
            else:
                return True

        return False


class CPDSubmissionEvidence(models.Model):

    submission = models.ForeignKey('CPDSubmission')
    file = models.FileField(storage=fs, upload_to='cpd', verbose_name='Evidence', help_text='Please upload any Evidence (PDF file or similar) to support this CPD application.')
    order = models.IntegerField(default=0)

    def __unicode__(self):
        return "%s Evidence %s" % (self.submission, self.order)


class CPDSubmissionYear(models.Model):

    member = models.ForeignKey('members.Member')
    start_date = models.DateField()
    end_date = models.DateField()
    certificate = models.FileField(upload_to='cpd', blank=True, null=True)

    def __unicode__(self):
        return "%s %s-%s" % (self.member, self.start_date.year, self.end_date.year)

    def get_status(self):
        return 'Ok'

    def get_cpd_points(self):
        cpd_submissions = CPDSubmission.objects.filter(member=self.member, date__gte=self.start_date, date__lte=self.end_date, approved=True)
        points = 0
        for cpd_submission in cpd_submissions:
            points = points + cpd_submission.points_value
        return points
