# Copyright The IETF Trust 2011-2020, All Rights Reserved
# -*- coding: utf-8 -*-


from django.contrib.syndication.views import Feed, FeedDoesNotExist
from django.utils.feedgenerator import Atom1Feed
from django.urls import reverse as urlreverse
from django.utils.html import strip_tags
from django.template.defaultfilters import truncatewords

from ietf.group.models import Group, GroupEvent
from ietf.doc.models import DocEvent

class GroupChangesFeed(Feed):
    feed_type = Atom1Feed
    description_template = "group/feed_item_description.html"

    def get_object(self, request, acronym):
        return Group.objects.get(acronym=acronym)

    def title(self, obj):
        return "Changes for %s %s" % (obj.acronym, obj.type)

    def link(self, obj):
        if not obj:
            raise FeedDoesNotExist
        return obj.about_url()

    def description(self, obj):
        return self.title(obj)

    def items(self, obj):
        events = list(obj.groupevent_set.all().select_related("group"))
        if obj.charter:
            events += list(obj.charter.docevent_set.all())

        events.sort(key=lambda e: (e.time, e.id), reverse=True)

        return events

    def item_link(self, obj):
        if isinstance(obj, DocEvent):
            return urlreverse("ietf.doc.views_doc.document_main", kwargs={'name': obj.doc.name })
        elif isinstance(obj, GroupEvent):
            return obj.group.about_url()

    def item_pubdate(self, obj):
        return obj.time

    def item_title(self, obj):
        title = "%s - %s" % (truncatewords(strip_tags(obj.desc), 10), obj.by)
        if isinstance(obj, DocEvent):
            title = "Chartering: %s" % title

        return title