from django.shortcuts import render

from uuid import uuid4

import requests 

from .models import *
from .serializers import *

from rest_framework import status, permissions

from rest_framework.views import APIView
from rest_framework.viewsets import ModelViewSet
from rest_framework.generics import CreateAPIView
from rest_framework.response import Response

# Create your views here.
class FoundationViewSet(ModelViewSet):
    permission_classes = [permissions.AllowAny]
    queryset = models.Foundation.objects.all()
    serializer_class = FoundationSerializer

class ConsumerOrderViewSet(ModelViewSet):
    queryset = ''
    serializerClass = ConsumerOrderSerializer

    def list(self, request, *args, **kwargs):
        queryset = request.user.consumer.foundation_orders.all()
        serializer = ConsumerOrderSerializer(queryset, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)


class ConsumerCreate(CreateAPIView):
    model = User
    permission_classes = [permissions.AllowAny]
    serializer_class = ConsumerCreateSerializer

class ConsumerDetail(APIView):
    def get(self, request, format=None):
        profile = request.user.consumer
        serializer = ConsumerSerializer(profile)
        return Response(serializer.data, status=status.HTTP_200_OK)

class ConsumerUpdate(APIView):
    def post(self, request, format=None):
        profile = request.user.consumer
        profile.phone = request.data['phone']
        profile.save()

class ConsumerAddWallet(APIView):
    def post(self, request, format=None):
        profile = request.user.consumer
        profile.wallet = Wallet.objects.create(address=request.data['address'])
        profile.save()

def generate_order(request):
    if request.method == 'POST':
        foundation = User.objects.get(username=request.POST['foundation']).foundation
        price = int(request.POST['price'])
        uuid = uuid4()
        order = FoundationOrder.objects.create(consumer=request.user.consumer, foundation=foundation, price=price, uuid=uuid)

        rate = int(requests.get("https://node.deso.org/api/v0/get-exchange-rate").json()["USDCentsPerBitCloutExchangeRate"])

        price_in_nanos = (((10**9) * price) / rate)

        options = {
	        "SenderPublicKeyBase58Check": request.user.consumer.wallet.address,
	        "RecipientPublicKeyOrUsername": foundation.wallet.address,
	        "AmountNanos": price_in_nanos
        }

        hex = request.post('https://node.deso.org/api/v0/send-deso', json=options).json()["TransactionHex"]
        foundation.hex = hex

        foundation.save()