from django.views import generic
from django.db import models

from representatives.views import RepresentativeViewMixin
from representatives.models import Mandate

from .models import Position
from .forms import PositionForm


class PositionCreate(generic.CreateView):
    model = Position
    form_class = PositionForm

    def get_success_url(self):
        return self.object.representative.get_absolute_url()


class PositionDetail(RepresentativeViewMixin, generic.DetailView):
    queryset = Position.objects.filter(published=True).select_related(
        'representative__score')

    def get_queryset(self):
        qs = super(PositionDetail, self).get_queryset()
        qs = qs.prefetch_related(models.Prefetch(
            'representative__mandates',
            Mandate.objects.select_related('constituency__country', 'group')
        ))
        return qs

    def get_object(self):
        obj = super(PositionDetail, self).get_object()
        self.add_representative_country_and_main_mandate(obj.representative)
        return obj