# coding: utf-8
from django.db import models

from representatives.models import Chamber, Representative, TimeStampedModel


class Dossier(TimeStampedModel):
    title = models.CharField(max_length=1000)
    reference = models.CharField(max_length=200, unique=True)
    text = models.TextField(blank=True, default='')

    class Meta:
        unique_together = (('title', 'reference'))

    def __unicode__(self):
        return unicode(self.title)


class Document(TimeStampedModel):
    dossier = models.ForeignKey(Dossier, related_name='documents')
    chamber = models.ForeignKey(Chamber)
    title = models.CharField(max_length=1000)
    kind = models.CharField(max_length=255, blank=True, default='')
    link = models.URLField(max_length=1000)


class Proposal(TimeStampedModel):
    dossier = models.ForeignKey(Dossier, related_name='proposals')
    title = models.CharField(max_length=1000, unique=True)
    description = models.TextField(blank=True, default='')
    reference = models.CharField(max_length=200, blank=True, null=True)
    datetime = models.DateTimeField(db_index=True)
    kind = models.CharField(max_length=200, blank=True, default='')
    total_abstain = models.IntegerField()
    total_against = models.IntegerField()
    total_for = models.IntegerField()

    representatives = models.ManyToManyField(
        Representative, through='Vote', related_name='proposals'
    )

    class Meta:
        ordering = ['datetime']
        unique_together = (('dossier', 'title', 'reference',
                            'kind', 'total_abstain', 'total_against',
                            'total_for'))

    @property
    def status(self):
        if self.total_for > self.total_against:
            return 'adopted'
        else:
            return 'rejected'

    def __unicode__(self):
        return unicode(self.title)


class Vote(models.Model):
    VOTECHOICES = (
        ('abstain', 'abstain'),
        ('for', 'for'),
        ('against', 'against')
    )

    proposal = models.ForeignKey(Proposal, related_name='votes')

    representative = models.ForeignKey(
        Representative, related_name='votes', null=True)
    # Save representative name in case of we don't find the representative
    representative_name = models.CharField(max_length=200, blank=True)

    position = models.CharField(max_length=10, choices=VOTECHOICES)

    class Meta:
        ordering = ['proposal__datetime']
        unique_together = (('proposal', 'representative'))