from django.contrib.auth import login, get_user_model
from rest_framework import permissions
from account.serializers.email_verification import EmailVerificationSerializer
from knox.models import AuthToken
from django.conf import settings
from rest_framework.response import Response
from rest_framework import status
from account.utils import send_forgot_password_email
from rest_framework.views import APIView

from django.contrib.auth import get_user_model
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from knox.models import AuthToken
from account.utils import send_forgot_password_email

class EmailVerificationView(APIView):
    def post(self, request):
        serializer = EmailVerificationSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        email = serializer.validated_data["email"]

        try:
            user = get_user_model().objects.get(email=email)
        except get_user_model().DoesNotExist:
            return Response("User with this email does not exists", status=status.HTTP_404_NOT_FOUND)

        token = self.create_auth_token(user)
        reset_password_url = f"https://asanbawar.com/reset-password-confirm/?token={token}"
        email_sent = self.send_verification_email(user, reset_password_url)

        if email_sent:
            return Response("Verification email sent, please check your inbox, if you can't find the email in your inbox please check you span", status=status.HTTP_200_OK)
        else:
            return Response(
                "Failed to send verification email",
                status=status.HTTP_500_INTERNAL_SERVER_ERROR,
            )

    def create_auth_token(self, user):
        return AuthToken.objects.create(user)[1]

    def send_verification_email(self, user, reset_link):
        try:
            send_forgot_password_email(user, reset_link)
            return True
        except Exception as e:
            return False
        













