from django.db import models
from solo.models import SingletonModel

class JobSettings(SingletonModel):

    page_introduction = models.TextField(blank=True,null=True,help_text='Text that appears on the job listing.')
    advert_introduction = models.TextField(blank=True,null=True,help_text='Text that appears when member is creating an advert.')
    advert_success_introduction = models.TextField(blank=True,null=True,help_text='Message that appears once a member has created an advert.')
    cost_website = models.FloatField(default=0, verbose_name='Cost for advert submission with no alert')
    cost_website_alert = models.FloatField(default=0, verbose_name='Cost for advert submission with alert')

    def __unicode__(self):
        return "Job Settings"

class JobCategory(models.Model):

    title       = models.CharField(max_length=200)
    slug        = models.SlugField(max_length=202,unique=True)
    description = models.TextField(blank=True,null=True)

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['title']

    def get_jobs(self):
        jobs = Job.objects.filter(categories=self)
        return jobs

    def get_published_jobs(self):
        jobs = Job.objects.filter(categories=self,published=True)
        return jobs

    def get_current_jobs(self):
        from datetime import date
        today = date.today()
        jobs = Job.objects.filter(categories=self,published=True,closing_date__gte=today)
        return jobs

class Job(models.Model):

    PUBLICISED_CHOICES = (
        (u'website', u'Advert on the website'),
        (u'website-email', u'Advert on the website and email alert to the membership'),
    )

    title = models.CharField(max_length=200,verbose_name='Job Title')
    slug = models.SlugField(max_length=202,unique=True)
    unique_key = models.CharField(max_length=100,blank=True,null=True)

    categories = models.ManyToManyField('JobCategory')

    closing_date    = models.DateField()
    vacancy_ref_no  = models.CharField(max_length=200,blank=True,null=True,verbose_name='Vacancy Reference')
    salary          = models.CharField(max_length=200,blank=True,null=True)
    address         = models.TextField(blank=True,null=True)
    duration        = models.CharField(max_length=200,blank=True,null=True)

    description         = models.TextField(verbose_name='Job Description')
    further_information = models.TextField(blank=True,null=True,help_text='Please include any external links for further information about this position.')
    contact_details     = models.TextField(blank=True,null=True)
    publicised      = models.CharField(max_length=20, verbose_name='How would you like your advert to be publicised?', choices=PUBLICISED_CHOICES, default='website-email')

    #for members submitting applications
    published       = models.BooleanField(default=False)
    member          = models.ForeignKey('members.Member',blank=True,null=True)
    created         = models.DateTimeField(auto_now_add=True)

    complete        = models.BooleanField(default=False)
    paid            = models.BooleanField(default=False)
    amount_paid     = models.FloatField(default=0)

    def __unicode__(self):
        return self.title

    class Meta:
        ordering = ['title']

    def get_total(self):
        settings = JobSettings.get_solo()
        if self.publicised == 'website':
            return settings.cost_website
        elif self.publicised == 'website-email':
            return settings.cost_website_alert
        else:
            return 0

    def get_receipt_description(self):
        if self.publicised == 'website':
            return 'Job Advert - Website Only'
        elif self.publicised == 'website-email':
            return 'Job Advert - Website Only with Alert to Membership'
        else:
            return '-'
