# from rest_framework_simplejwt.tokens import RefreshToken
#
# from rest_framework.views import APIView
# from rest_framework.response import Response
# from rest_framework import status
# from django.contrib.auth import get_user_model
#
# from apps.core.services.email_otp import verify_email_otp, send_email_otp
# from apps.core.services import validate_user_context
# from apps.core.serializers import EmailOTPRequestSerializer, EmailOTPVerifySerializer
#
# User = get_user_model()
#
#
# class EmailOTPRequestView(APIView):
#     authentication_classes = []
#     permission_classes = []
#
#     def post(self, request):
#         serializer = EmailOTPRequestSerializer(data=request.data)
#         serializer.is_valid(raise_exception=True)
#
#         user_id = serializer.validated_data["user_id"]
#
#         try:
#             user = User.objects.get(id=user_id)
#         except User.DoesNotExist:
#             return Response(
#                 {"detail": "Invalid user"},
#                 status=status.HTTP_400_BAD_REQUEST
#             )
#
#         send_email_otp(user)
#
#         return Response(
#             {"detail": "OTP sent to registered email"},
#             status=status.HTTP_200_OK
#         )
#
# class EmailOTPVerifyView(APIView):
#     authentication_classes = []
#     permission_classes = []
#
#     def post(self, request):
#         serializer = EmailOTPVerifySerializer(data=request.data)
#         serializer.is_valid(raise_exception=True)
#
#         user_id = serializer.validated_data["user_id"]
#         token = serializer.validated_data["token"]
#
#         try:
#             user = User.objects.get(id=user_id)
#         except User.DoesNotExist:
#             return Response(
#                 {"detail": "Invalid user"},
#                 status=status.HTTP_400_BAD_REQUEST
#             )
#
#         if not verify_email_otp(user, token):
#             return Response(
#                 {"detail": "Invalid or expired OTP"},
#                 status=status.HTTP_400_BAD_REQUEST
#             )
#
#         validate_user_context(user)
#
#         refresh = RefreshToken.for_user(user)
#
#         return Response({
#             "refresh": str(refresh),
#             "access": str(refresh.access_token),
#         })
