from rest_framework import viewsets
from rest_framework.decorators import link
from rest_framework.response import Response

from orchestra.api import router
from orchestra.apps.accounts.api import AccountApiMixin

from . import settings
from .models import Domain
from .serializers import DomainSerializer


class DomainViewSet(AccountApiMixin, viewsets.ModelViewSet):
    model = Domain
    serializer_class = DomainSerializer
    filter_fields = ('name',)
    
    def get_queryset(self):
        qs = super(DomainViewSet, self).get_queryset()
        return qs.prefetch_related('records')
    
    @link()
    def view_zone(self, request, pk=None):
        domain = self.get_object()
        return Response({
            'zone': domain.render_zone()
        })
    
    def metadata(self, request):
        ret = super(DomainViewSet, self).metadata(request)
        names = ['DOMAINS_DEFAULT_A', 'DOMAINS_DEFAULT_MX', 'DOMAINS_DEFAULT_NS']
        ret['settings'] = {
            name.lower(): getattr(settings, name, None) for name in names
        }
        return ret


router.register(r'domains', DomainViewSet)