# Path: cpm_generic/models.py
# class TranslatedField(object):
#     def __init__(self, en_field, be_field, ru_field):
#         self.en_field = en_field
#         self.be_field = be_field
#         self.ru_field = ru_field
# 
#     def __get__(self, instance, owner):
#         fields = {
#             'en': self.en_field,
#             'be': self.be_field,
#             'ru': self.ru_field,
#         }
#         field = fields.get(translation.get_language(), self.en_field)
#         return getattr(instance, field)
# 
# Path: modeladminutils/edit_handlers.py
# class AdminModelChooserPanel(object):
#     def __init__(self, field_name):
#         self.field_name = field_name
# 
#     def bind_to_model(self, model):
#         return type(
#             str('_AdminModelChooserPanel'),
#             (BaseAdminModelChooserPanel,),
#             {
#                 'model': model,
#                 'field_name': self.field_name,
#             }
#         )
# 
# Path: modeladminutils/models.py
# class BaseSearchableManager(models.Manager):
#     def get_queryset(self):
# 
# Path: submissions/constants.py
# SECTIONS = (
#     (1, _('Fiction')),
#     (2, _('Animation')),
#     (3, _('Documentary')),
#     (4, _('Experimental')),
# )


from collections import defaultdict
from django.db import models
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailcore.models import Orderable, Page
from wagtail.wagtailadmin.edit_handlers import FieldPanel, InlinePanel
from wagtail.wagtailsearch import index
from cpm_generic.models import TranslatedField
from modeladminutils.edit_handlers import AdminModelChooserPanel
from modeladminutils.models import SearchableManager
from submissions.constants import SECTIONS
    ]


class TimeTable(Page):

    # TODO: add season
    caption_en = models.CharField(max_length=250)
    caption_be = models.CharField(max_length=250)
    caption_ru = models.CharField(max_length=250)
    caption = TranslatedField('caption_en', 'caption_be', 'caption_ru')

    content_panels = Page.content_panels + [
        FieldPanel('caption_en'),
        FieldPanel('caption_be'),
        FieldPanel('caption_ru'),
        InlinePanel('related_events', label="Events"),
    ]

    def get_context(self, request, *args, **kwargs):
        context = super(TimeTable, self).get_context(request, *args, **kwargs)

        grouped_events = defaultdict(list)
        for event in self.related_events.all():
            group_key = event.starts_at.date()
            grouped_events[group_key].append(event)
        context['grouped_events'] = sorted(grouped_events.iteritems())

        is_legacy = bool(request.GET.get('legacy'))
        context['base_template'] = 'empty.html' if is_legacy else 'base.html'


# Path: cpm_generic/models.py
# class TranslatedField(object):
#     def __init__(self, en_field, be_field, ru_field):
#         self.en_field = en_field
#         self.be_field = be_field
#         self.ru_field = ru_field
# 
#     def __get__(self, instance, owner):
#         fields = {
#             'en': self.en_field,
#             'be': self.be_field,
#             'ru': self.ru_field,
#         }
#         field = fields.get(translation.get_language(), self.en_field)
#         return getattr(instance, field)
# 
# Path: modeladminutils/edit_handlers.py
# class AdminModelChooserPanel(object):
#     def __init__(self, field_name):
#         self.field_name = field_name
# 
#     def bind_to_model(self, model):
#         return type(
#             str('_AdminModelChooserPanel'),
#             (BaseAdminModelChooserPanel,),
#             {
#                 'model': model,
#                 'field_name': self.field_name,
#             }
#         )
# 
# Path: modeladminutils/models.py
# class BaseSearchableManager(models.Manager):
#     def get_queryset(self):
# 
# Path: submissions/constants.py
# SECTIONS = (
#     (1, _('Fiction')),
#     (2, _('Animation')),
#     (3, _('Documentary')),
#     (4, _('Experimental')),
# )


# Path: events/models.py
from collections import defaultdict
from django.db import models
from modelcluster.fields import ParentalKey
from modelcluster.models import ClusterableModel
from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailcore.models import Orderable, Page
from wagtail.wagtailadmin.edit_handlers import FieldPanel, InlinePanel
from wagtail.wagtailsearch import index
from cpm_generic.models import TranslatedField
from modeladminutils.edit_handlers import AdminModelChooserPanel
from modeladminutils.models import SearchableManager
from submissions.constants import SECTIONS

    ]


class TimeTable(Page):

    # TODO: add season
    caption_en = models.CharField(max_length=250)
    caption_be = models.CharField(max_length=250)
    caption_ru = models.CharField(max_length=250)
    caption = TranslatedField('caption_en', 'caption_be', 'caption_ru')

    content_panels = Page.content_panels + [
        FieldPanel('caption_en'),
        FieldPanel('caption_be'),
        FieldPanel('caption_ru'),
        InlinePanel('related_events', label="Events"),
    ]

    def get_context(self, request, *args, **kwargs):
        context = super(TimeTable, self).get_context(request, *args, **kwargs)

        grouped_events = defaultdict(list)
        for event in self.related_events.all():
            group_key = event.starts_at.date()
            grouped_events[group_key].append(event)
        context['grouped_events'] = sorted(grouped_events.iteritems())

        is_legacy = bool(request.GET.get('legacy'))
        context['base_template'] = 'empty.html' if is_legacy else 'base.html'


        return context