from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.reverse import reverse
from rest_framework import serializers
from rest_framework import generics
from rest_framework.views import APIView
from core.models import *
from django.forms import widgets
from django.core.exceptions import PermissionDenied
from xos.exceptions import XOSNotFound

class SSHKeyList(APIView):
    method_kind = "list"
    method_name = "sshkeys"

    def get(self, request, format=None):
        instances=[]
        for instance in self.get_queryset().all():
            if instance.instance_id:
                instances.append( {"id": instance.instance_id,
                                   "public_keys": instance.get_public_keys(),
                                   "node_name": instance.node.name } )

        return Response(instances)

    def get_queryset(self):
        queryset = queryset=Instance.objects.all()

        node_name = self.request.QUERY_PARAMS.get('node_name', None)
        if node_name is not None:
            queryset = queryset.filter(node__name = node_name)

        return queryset

class SSHKeyDetail(APIView):
    method_kind = "detail"
    method_name = "sshkeys"

    def get(self, request, format=None, pk=0):
        instances = self.get_queryset().filter(instance_id=pk)
        if not instances:
            raise XOSNotFound("didn't find instance for instance %s" % pk)
        return Response( [ {"id": instances[0].instance_id,
                            "public_keys": instances[0].get_public_keys(),
                            "node_name": instances[0].node.name } ])

    def get_queryset(self):
        queryset = queryset=Instance.objects.all()

        node_name = self.request.QUERY_PARAMS.get('node_name', None)
        if node_name is not None:
            queryset = queryset.filter(node__name = node_name)

        return queryset

