from asyncio.sslproto import _create_transport_context
from decimal import Decimal
from urllib.error import HTTPError
from django.shortcuts import redirect, render
import datetime
# from subscriptions.models import PlanCost,SubscriptionPlan
from package.models import CostPlan,SubPlan, SubTransaction, UserSub
from product.models import Product
from .forms import SubscriptionForm
from django.urls import reverse
from django.views.generic import TemplateView
from django.conf import settings
from django.utils import timezone
import stripe

stripe.api_key = settings.STRIPE_KEY




class PlanList(TemplateView):
    template_name="checkout.html"
    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        context["sub_plan"]=SubPlan.objects.all()
        print(context["sub_plan"])
        context["form"]=SubscriptionForm
        return self.render_to_response(context)


def create_checkout_session(request,id):
    if request.method == 'POST':
        protocol='https://'
        if settings.DEBUG: 
            protocol='http://'    
        # form=SubscriptionForm(request.POST)
        if request.method == "POST":           
            sub_plan_id = id
            plan_obj = CostPlan.objects.get(subplan__id=sub_plan_id) if sub_plan_id else print("asdf")
            plandetail ={
            'price_data': {
                'currency': 'usd',
                'product_data': {
                'name': str(plan_obj.subplan),
                },
                'unit_amount': int(plan_obj.cost*10),
            },
            'quantity': 1,
            }
            print(protocol+request.get_host()+"/payment/success/?session_id={CHECKOUT_SESSION_ID}")
            session = stripe.checkout.Session.create(
                line_items=[plandetail],
                client_reference_id=f'costPlan_id={plan_obj.id}',
                mode='payment',
                success_url=protocol+request.get_host()+"/payment/success/?session_id={CHECKOUT_SESSION_ID}",
                cancel_url=protocol+request.get_host()+reverse('package:fail'),
            )
            return redirect(session.url)
    return redirect("/plans")

def successview(request):
    stripe_id=request.GET.get('session_id','')
    try:
        session = stripe.checkout.Session.retrieve(stripe_id)
        status,costplan_id = session.payment_status,session.client_reference_id.split('=')[1]
        customer = stripe.Customer.retrieve(session.customer)
        if session.payment_status == "paid":
            cost_plan = CostPlan.objects.get(id=costplan_id)
            print("here")
            SubTransaction.objects.create(
                user=request.user,
                subscription=cost_plan,
                date_transaction=timezone.now(),
                amount=Decimal(session.amount_total/100),
                stripe_session_id = stripe_id,
                payment_status = status,
                stripe_customer_id = customer.id
            )
            UserSub.objects.create(
                user = request.user,
                subscription = cost_plan,
                allowed_posts = cost_plan.post
            )
        print("customer_id",customer.id,customer.email)
    except Exception as e:
        print("unknown session id",e)
    return render(request,"success.html")
