from django.shortcuts import render
from django.views import View
from django.http import JsonResponse
import logging
from django.conf import settings
from apps.subscriptions.models import Subscription, Plan, Payment
from apps.subscriptions.utils import CancelSubscription
logger = logging.getLogger(__file__)
# Create your views here.

# initial cancelsubscription class
cancel = CancelSubscription(CLIENT_ID=settings.PAYPAL_CLIENTID,CLIENT_SECRET=settings.PAYPAL_SECRETID)
def is_ajax(request):
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

class UpgradePlanView(View):
    def post(self, request, *args, **kwargs):
        if is_ajax(request):
            logger.info(request.POST)
            try:
                # check if user want to upgrade to same plan
                if request.user.subscription.plan.plan_id == request.POST['PlanID']:
                    return JsonResponse({'status':"error","message":"You cannot upgrade to your current plan"})
                else:
                    # create new payment refered to same user subscription
                    logger.info("Create new Payment")
                    new_payment = Payment()
                    new_payment.transactionID = request.POST['OrderID']
                    new_payment.conversationID = request.POST['ConversationID']
                    new_payment.subscription = request.user.subscription
                    new_payment.sub_id = request.POST['SubscriptionID']
                    new_payment.is_active = True
                    new_payment.save()
                    logger.info(" Create new Payment success! ")

                    # turn old payment off
                    # loop over all user payment if any one does't == the new payment turn it off
                    old_payment = Payment.objects.filter(subscription=request.user.subscription)
                    for pay in old_payment:
                        if pay.sub_id != request.POST['SubscriptionID']:
                            pay.is_active = False
                            pay.save()
                    logger.info("Turn old payments off ")

                    #upgrade user to the new plan
                    new_subscription = Subscription.objects.get(user=request.user)
                    new_plan = Plan.objects.get(plan_id=request.POST['PlanID'])
                    new_subscription.plan = new_plan
                    new_subscription.save()
                    logger.info("Plan Upgraded Suceess!")

                    # cancel subscription
                    canceled = cancel.cancel_subscription(request.POST['SubscriptionID'])
                    if canceled.status_code != 204:
                    #     send us message to cancel it mannually
                        logger.error("Subscription not canceled")

                    return JsonResponse({'status': 'OK', 'message': "Upgrade function is called success"})
            except Exception as e:
                logger.error(e)
                return JsonResponse({'status': 'OK', 'message': "Something wrong happen"})