# -*- coding: utf-8 -*-
import os
import random
from django.db import models
from django.contrib import auth
from django.utils import timezone
from django.conf import settings
from django.utils.encoding import python_2_unicode_compatible
from django.utils.encoding import force_unicode
from django.utils.text import slugify
from django.core.urlresolvers import reverse
from django.core.cache import cache
from imagekit.models import ImageSpecField, ProcessedImageField
from imagekit.processors import ResizeToFit, Transpose

from PIL import Image
import os
from cStringIO import StringIO
from django.core.files.base import ContentFile

from django_countries.fields import CountryField
from solo.models import SingletonModel
from taggit.managers import TaggableManager

import reversion

# PrilohaReseni method
def generate_filename(self, filename):
    clean = filename.replace('/','-').replace('\0', '')
    datedir = timezone.now().strftime('%Y-%m')
    fname = "%s_%s" % (
        timezone.now().strftime('%Y-%m-%d-%H:%M'),
        clean)
    return os.path.join(settings.SEMINAR_RESENI_DIR, datedir, fname)


#@reversion.register(ignore_duplicate_revision=True)
#@python_2_unicode_compatible
class KorekturovanePDF(models.Model):
    class Meta:
        db_table = 'korekturovane_cislo'
        verbose_name = u'PDF k opravám'
        verbose_name_plural = u'PDF k opravám'
    
    #Interní ID
    id  = models.AutoField(primary_key = True)

    pdf = models.FileField(u'pdf', upload_to = generate_filename)

    #TODO Nepovinný foreign key k číslu



@reversion.register(ignore_duplicate_revision=True)
@python_2_unicode_compatible
class Oprava(models.Model):
    class Meta:
        db_table = 'opravy'
        verbose_name = u'Oprava'
        verbose_name_plural = u'Opravy'
        ordering = ['y','x']
    
    #Interní ID
    id  = models.AutoField(primary_key = True)

    #pdf = models.ForeignKey(KorekturovanePDF)

    strana = models.IntegerField(u'strana s opravou', help_text='Strana s opravou (od 0)')

    x = models.IntegerField(u'x-ová souřadnice bugu')
    y = models.IntegerField(u'y-ová souřadnice bugu')

    STATUS_K_OPRAVE = 'k_oprave'
    STATUS_OPRAVENO = 'opraveno'
    STATUS_SMAZANO = 'smazano'
    STATUS_CHOICES = (
            (STATUS_K_OPRAVE, u'K opravě'),
            (STATUS_OPRAVENO, u'Opraveno'),
            (STATUS_SMAZANO, u'Smazáno'),
            )
    status = models.CharField(u'stav opravy',max_length=16, choices=STATUS_CHOICES, blank=False,
            default = STATUS_K_OPRAVE)


    # TODO: Změnit na cizí klíč do orgů
    autor = models.TextField(u'autor opravy',blank = True, help_text='Autor opravy')
    
    text = models.TextField(u'text opravy',blank = True, help_text='Text opravy')

#    def __init__(self,dictionary):
#        for k,v in dictionary.items():
#            setattr(self,k,v)

    def __str__(self):
        return force_unicode(u'%s od %s: %s',self.status,self.autor,self.text)



@reversion.register(ignore_duplicate_revision=True)
@python_2_unicode_compatible
class Komentar(models.Model):
    class Meta:
        db_table = 'komentare'
        verbose_name = u'Komentář k opravě'
        verbose_name_plural = u'Komentáře k opravě'
        ordering = ['cas']
    
    #Interní ID
    id  = models.AutoField(primary_key = True)

    cas = models.DateTimeField(u'čas komentáře',default=timezone.now,help_text = 'Čas zadání komentáře')

    oprava = models.ForeignKey(Oprava)
    # TODO: Změnit na cizí klíč do orgů
    autor = models.TextField(u'autor komentáře',blank = True, help_text='Autor komentáře')
    
    text = models.TextField(u'text komentáře',blank = True, help_text='Text komentáře')

    def __str__(self):
        return force_unicode(u'%s od %s: %s',self.cas,self.autor,self.text)