
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
from django.http import JsonResponse

from rest_framework.decorators import action, api_view, schema

from .. import models, schemas
from decouple import config
import json
import jwt
from datetime import datetime, timedelta
import logging

private_key = config('SECRET_JWT')

# Views jwt
@csrf_exempt
@action(detail=False, methods=['post','get'])
@api_view(['GET','POST'])
@schema(schemas.AuthSchema())
def jwt_login(request):
    if request.method == 'POST':
        count = models.Usuario.objects.filter(vigente = True).count()
        logging.error(f'count usuario vigente = {count}')

        # validar username y password
        input = json.loads(request.body)
        username = input['username']
        password = input['password']
        usuario = None

        if count > 0:
            usuario = models.Usuario.objects.filter(login = username, vigente = True).values().first()
        elif username == '0' and password == '0':
            usuario = { 'login': '0', 'clave': '0' }

        if not usuario:
            return HttpResponse('Acceso no valido', status=400)

        if username != '0':
            clave = models.UsuarioClave.objects.filter(login = username).first()
            if not clave or clave.clave != password:
                return HttpResponse('Acceso no valido', status=400)

        ahora = datetime.utcnow()
        manana = ahora + timedelta(days=1)
        manana = manana.replace(hour=0, minute=0, second=0, microsecond=0)

        payload = {
            'iat': ahora,
            'exp': manana, # ahora + timedelta(minutes=60),
            'login': usuario['login']
        }
        token = jwt.encode(payload, private_key, algorithm="HS256")
        return JsonResponse({ 'token': token })
    elif request.method == 'GET':
        return JsonResponse(request.jwt_info)