from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from django.utils import timezone

from customer_api.models import ReactivationRequest
from customer_api.serializers.ReactivationRequestSerializer import ReactivationRequestSerializer


@api_view(['POST'])
def reactivation_request(request):
    if request.method == 'POST':
        serializer = ReactivationRequestSerializer(data=request.data)
        if serializer.is_valid():
            customer = serializer.validated_data['customer']

            # Check if the customer is eligible for reactivation
            if customer.valid_upto and customer.valid_upto < timezone.now().date():
                ReactivationRequest.objects.create(customer=customer)
                return Response({"message": "Reactivation request submitted successfully."},
                                status=status.HTTP_201_CREATED)
            else:
                return Response({"message": "Customer account is not expired or already active."},
                                status=status.HTTP_400_BAD_REQUEST)

        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


@api_view(['POST'])
# not completed --------------testing required
def reactivate_account(request):
    if request.method == 'POST':
        reactivation_request_id = request.data.get('reactivation_request_id')

        try:
            reactivation_request = ReactivationRequest.objects.get(id=reactivation_request_id)
            reactivate_for_years = request.data.get('for_years', reactivation_request.for_years)
            if reactivation_request.customer.batch.created_by.company == request.user.company:
                reactivation_request.processed = True
                reactivation_request.processed_date = timezone.now()
                reactivation_request.processed_by = request.user
                reactivation_request.transaction_id = request.data.get('transaction_id',
                                                                       reactivation_request.transaction_id)
                reactivation_request.customer.reactivate_user(reactivation_request.customer.id, request.user.id,
                                                              reactivate_for_years)
                reactivation_request.customer.save()

                # adding pending alount to the company
                request.user.company += float(request.user.company.cost_per_qr_code * reactivation_request.for_years)
                request.user.company.save()

        except ReactivationRequest.DoesNotExist:
            return Response({"message": "Reactivation request not found."}, status=status.HTTP_404_NOT_FOUND)


        return Response({"message": "Reactivation request submitted successfully."},
                        status=status.HTTP_201_CREATED)
    return Response({"message": "Invalid request."}, status=status.HTTP_400_BAD_REQUEST)
