from datetime import date
import os
import threading

from cms.models import CMSPlugin
from cms.utils import get_cms_setting
from django.db import models
from django.utils.translation import ugettext_lazy as _
from inline_ordering.models import Orderable
from django.utils.deconstruct import deconstructible
from django.db import connection

import utils

localdata = threading.local()
localdata.TEMPLATE_CHOICES = utils.autodiscover_templates()
TEMPLATE_CHOICES = localdata.TEMPLATE_CHOICES


@deconstructible
class UploadPath(object):

    def __init__(self, sub_path):
        self.path = sub_path

    def __call__(self, instance, filename):
        if connection.schema_name:
            return "gallery/%s/%s/%s" % (instance.title, connection.schema_name, filename)
        else:
            return "gallery/%s/%s" % (instance.title, filename)

get_upload_path = UploadPath('GalleryPlugin')

class GalleryPlugin(CMSPlugin):

    def copy_relations(self, oldinstance):
        for img in oldinstance.image_set.all():
            new_img = Image()
            new_img.gallery=self
            new_img.src = img.src
            new_img.src_height = img.src_height
            new_img.src_width = img.src_width
            new_img.title = img.title
            new_img.alt = img.alt
            new_img.save()

    template = models.CharField(max_length=255,
                                choices=TEMPLATE_CHOICES,
                                default=TEMPLATE_CHOICES[0][0],
                                editable=len(TEMPLATE_CHOICES) > 1)

    def __unicode__(self):
        return _(u'%(count)d image(s) in gallery') % {'count': self.image_set.count()}


class Image(Orderable):
    ZERO_PERCENT = "0%"
    TWENTY_FIVE_PERCENT = "25%"
    FIFTY_PERCENT = "50%"
    SEVENTY_FIVE_PERCENT = "75%"
    HUNDRED_PERCENT = "100%"
    CROP_CHOICES = (
        (ZERO_PERCENT, "0%"),
        (TWENTY_FIVE_PERCENT, "25%"),
        (FIFTY_PERCENT, "50%"),
        (SEVENTY_FIVE_PERCENT, "75%"),
        (HUNDRED_PERCENT, "100%"),
    )

    def get_media_path(self, filename):
        pages = self.gallery.placeholder.page_set.all()
        if pages.count():
            return pages[0].get_media_path(filename)
        else:
            today = date.today()
            return os.path.join(get_cms_setting('PAGE_MEDIA_PATH'),
                str(today.year), str(today.month), str(today.day), filename)

    gallery = models.ForeignKey(GalleryPlugin, verbose_name=_("Gallery"))
    src = models.ImageField(_("Image file"), upload_to=get_upload_path,
                            height_field='src_height',
                            width_field='src_width')
    src_height = models.PositiveSmallIntegerField(_("Image height"), editable=False, null=True)
    src_width = models.PositiveSmallIntegerField(_("Image height"), editable=False, null=True)
    title = models.CharField(_("Title"), max_length=255, blank=True)
    alt = models.TextField(_("Alt text"), blank=True)
    crop = models.CharField(default=ZERO_PERCENT, choices=CROP_CHOICES, max_length=10)

    def __unicode__(self):
        return self.title or self.alt or str(self.pk)

@@ -2029,16 +2029,291 @@
 ),%0A    )
+%0A    TOP_LEFT = 1%0A    TOP_RIGHT = 2%0A    BOTTOM_LEFT = 3%0A    BOTTOM_RIGHT = 4%0A    OVERLAY_POSITION_CHOICES = (%0A            (TOP_LEFT, 'Top Left'),%0A            (TOP_RIGHT, 'Top right'),%0A            (BOTTOM_LEFT, 'Bottom Left'),%0A            (BOTTOM_RIGHT, 'Bottom Right'),%0A    )
 %0A%0A    de
@@ -3238,24 +3238,223 @@
 blank=True)%0A
+    overlay_image = models.ImageField(_(%22Overlay Image%22,%0A        upload_to=get_upload_path))%0A    overlay_position = models.IntegerField(default=BOTTOM_LEFT,%0A        choices=OVERLAY_POSITION_CHOICES)%0A
     crop = m

add overlay image field