from django.urls import reverse
from django.utils.translation import ugettext_lazy as _

from misago.categories.models import THREADS_ROOT_NAME

from . import ThreadType


class Thread(ThreadType):
    root_name = THREADS_ROOT_NAME

    def get_category_name(self, category):
        if category.level:
            return category.name
        else:
            return _('None (will become top level category)')

    def get_category_absolute_url(self, category):
        if category.level:
            return reverse('misago:category', kwargs={
                'pk': category.pk,
                'slug': category.slug,
            })
        else:
            return reverse('misago:threads')

    def get_category_last_thread_url(self, category):
        return reverse('misago:thread', kwargs={
            'slug': category.last_thread_slug,
            'pk': category.last_thread_id
        })

    def get_category_last_post_url(self, category):
        return reverse('misago:thread-last', kwargs={
            'slug': category.last_thread_slug,
            'pk': category.last_thread_id
        })

    def get_category_read_api_url(self, category):
        return '{}?category={}'.format(
            reverse('misago:api:thread-read'), category.pk)

    def get_thread_absolute_url(self, thread, page=1):
        if page > 1:
            return reverse('misago:thread', kwargs={
                'slug': thread.slug,
                'pk': thread.pk,
                'page': page
            })
        else:
            return reverse('misago:thread', kwargs={
                'slug': thread.slug,
                'pk': thread.pk
            })

    def get_thread_last_post_url(self, thread):
        return reverse('misago:thread-last', kwargs={
            'slug': thread.slug,
            'pk': thread.pk
        })

    def get_thread_new_post_url(self, thread):
        return reverse('misago:thread-new', kwargs={
            'slug': thread.slug,
            'pk': thread.pk
        })

    def get_thread_unapproved_post_url(self, thread):
        return reverse('misago:thread-unapproved', kwargs={
            'slug': thread.slug,
            'pk': thread.pk
        })

    def get_thread_api_url(self, thread):
        return reverse('misago:api:thread-detail', kwargs={
            'pk': thread.pk
        })

    def get_thread_editor_api_url(self, thread):
        return reverse('misago:api:thread-post-editor', kwargs={
            'thread_pk': thread.pk
        })

    def get_thread_merge_api_url(self, thread):
        return reverse('misago:api:thread-merge', kwargs={
            'pk': thread.pk
        })

    def get_thread_poll_api_url(self, thread):
        return reverse('misago:api:thread-poll-list', kwargs={
            'thread_pk': thread.pk
        })

    def get_thread_posts_api_url(self, thread):
        return reverse('misago:api:thread-post-list', kwargs={
            'thread_pk': thread.pk
        })

    def get_poll_api_url(self, poll):
        return reverse('misago:api:thread-poll-detail', kwargs={
            'thread_pk': poll.thread_id,
            'pk': poll.pk
        })

    def get_poll_votes_api_url(self, poll):
        return reverse('misago:api:thread-poll-votes', kwargs={
            'thread_pk': poll.thread_id,
            'pk': poll.pk
        })

    def get_post_merge_api_url(self, thread):
        return reverse('misago:api:thread-post-merge', kwargs={
            'thread_pk': thread.pk
        })

    def get_post_move_api_url(self, thread):
        return reverse('misago:api:thread-post-move', kwargs={
            'thread_pk': thread.pk
        })

    def get_post_split_api_url(self, thread):
        return reverse('misago:api:thread-post-split', kwargs={
            'thread_pk': thread.pk
        })

    def get_post_absolute_url(self, post):
        return reverse('misago:thread-post', kwargs={
            'slug': post.thread.slug,
            'pk': post.thread.pk,
            'post': post.pk
        })

    def get_post_api_url(self, post):
        return reverse('misago:api:thread-post-detail', kwargs={
            'thread_pk': post.thread_id,
            'pk': post.pk
        })

    def get_post_likes_api_url(self, post):
        return reverse('misago:api:thread-post-likes', kwargs={
            'thread_pk': post.thread_id,
            'pk': post.pk
        })

    def get_post_editor_api_url(self, post):
        return reverse('misago:api:thread-post-editor', kwargs={
            'thread_pk': post.thread_id,
            'pk': post.pk
        })

    def get_post_edits_api_url(self, post):
        return reverse('misago:api:thread-post-edits', kwargs={
            'thread_pk': post.thread_id,
            'pk': post.pk
        })

    def get_post_read_api_url(self, post):
        return reverse('misago:api:thread-post-read', kwargs={
            'thread_pk': post.thread_id,
            'pk': post.pk
        })