from django.db import models
from django.contrib.auth.models import User
from tagging.fields import TagField
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from app.models import ItfModel

GENRES = (
  ('Fiction', 'Fiction'),
  ('Comedy', 'Comedy'),
)

LICENSE_TYPE_CHOICES = (
    ('adapt', 'Adaptation License'),
    ('perform', 'Performance License'),
)

LANGUAGE_CHOICES = (
  ('en', 'English'),
  ('hi', 'Hindi'),
  ('ma', 'Marathi'),
  ('be', 'Bengali'),
)

class Script(ItfModel):
  user = models.ForeignKey(User)
  title = models.CharField(max_length=255)
  synopsis = models.TextField(blank=True)
  no_characters = models.IntegerField(blank=True, null=True, help_text="Approximate number of characters")
  no_of_women = models.IntegerField(blank=True, null=True, help_text="How many characters are women?")
  tags = TagField(blank=True)
  production_notes = models.TextField(blank=True, help_text="Additional production notes")
  language = models.CharField(max_length=32, choices=LANGUAGE_CHOICES)
  approx_duration = models.IntegerField(blank=True, null=True, help_text="Approximate time, in minutes")
  is_partial = models.BooleanField(default=False, help_text="Check this if you are uploading only a partial script")
  author = models.CharField(max_length=255)
  contact = models.EmailField()
  script = models.FileField(null=True, upload_to='upload/scripts/')  
  license_adapt = models.ForeignKey("License", related_name="adaptation_license", help_text="License for adaptation rights")
  license_perform = models.ForeignKey("License", related_name="performance_license", help_text="License for performance rights")
  fts_fields = ['title', 'synopsis', 'author']
  fk_fields = ['license_adapt', 'license_perform']  

  add_form = 'ScriptForm'

  #Meta
  added = models.DateTimeField(auto_now_add=True)
  modified = models.DateTimeField(auto_now=True)

  def __unicode__(self):
    return self.title  

  def list_dict(self):
    return {
      'id': self.id,
      'title': self.title,
    }

  def info_dict(self):
    return {
      'title': self.title,
      'synopsis': self.synopsis,
      'no_characters': self.no_characters,
      'no_of_women': self.no_of_women,
      'production_notes': self.production_notes,
      'language': self.language,
      'approx_duration': self.approx_duration,
      'is_partial': self.is_partial,
      'author': self.author,
      'contact': self.contact,
      'script_file': self.script.url,
      'license_adapt': self.license_adapt,
      'license_perform': self.license_perform
    }

  '''
  @classmethod
  def get_list(kls, data):
    options = {
      'page_no': 1,
      'list_size': 8
    }
    options.update(data)
    l = []
    page_no = options['page_no']
    list_size = options['list_size']
    qset = kls.objects.all()
    
    paginator = Paginator(qset, list_size)  
    try:
      results = paginator.page(page_no)
    except (EmptyPage, InvalidPage):
      results = paginator.page(paginator.num_pages) 
    for r in results.object_list:
      l.append({
        'id': r.id,
        'title': r.title
      })
    return l   
    '''




class License(ItfModel):
  letter = models.CharField(max_length=2)
  name = models.CharField(max_length=255)
  short_description = models.TextField()
  readable_file = models.FileField(upload_to='upload/licenses/short/')
  legal_file = models.FileField(upload_to='upload/licenses/legal/') 
  typ = models.CharField(choices=LICENSE_TYPE_CHOICES, max_length=32)

  title_field = 'name'

  def __unicode__(self):
    return self.typ + ": " + self.letter + ": " + self.name

  def list_dict(self):
    return {
      'id': self.id,
      'title': self.name
    }

  def info_dict(self):
    return {
      'id': self.id,
      'letter': self.letter,
      'short_description': self.short_description,
      'readable_file': self.readable_file.url,
      'legal_file': self.legal_file.url,
      'typ': self.typ,
      'reviews': Review.objects.filter(script=self)
    }

class Review(models.Model):
  script = models.ForeignKey(Script)
  reviewer = models.CharField(max_length=255)
  reviewer_email = models.EmailField()
  text = models.TextField()



#this is to record who downloaded what play, etc.
class Downloader(models.Model):
  script = models.ForeignKey(Script)
  email = models.EmailField()

##Make sure to add Comments to scripts


