import datetime

from django.shortcuts import render,redirect
from django.contrib.auth.decorators import login_required
from users.forms import UserModelForm
from django.contrib import messages
from users.models import User
import json
from django.shortcuts import render
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.urls import reverse
from django.http.response import JsonResponse # new
from decouple import config
import stripe
from reservations.models import *
from django.utils import timezone

@login_required
def home(request):
    membres = User.objects.all()
    next_event = Event.objects.filter(start_date__gte=timezone.now().replace(hour=0, minute=0, second=0)).order_by('start_date').first()
    payments = Payment.objects.filter(has_paid=True)
    bookings = Booking.objects.filter(payment__has_paid=True)
    
    context = {
        "membres":membres,
        "actifs" : membres.filter(frais_carte=True),
        "next_event":next_event,
        "payments":payments,
        "bookings": bookings,

    }
    return render(request, 'dashboard/dashboard.html',context)


@login_required
def profile(request):
    user_form = UserModelForm(instance=request.user)
    if request.method == "POST" and "maj_profil" in request.POST:
        user_form = UserModelForm(request.POST, request.FILES, instance=request.user)
        if user_form.is_valid():
            user_form.save()
            messages.success(request,"Le profil a été mis a jour avec succes!")
        else:
            print("sww")
            print(user_form.errors)
    if request.method == "POST" and "password_change" in request.POST:
        old_password  = request.POST.get("old_password")
        new_password1  = request.POST.get("new_password1")
        new_password2  = request.POST.get("new_password2")

        if request.user.check_password(old_password):
            if new_password1 == new_password2:
                request.user.set_password(new_password1)
                request.user.save()
                messages.success(request, "Mot de passe modifié avec succès")
            else:
                messages.error(request, "Les deux mots de passe ne sont pas identiques")
        else:
            messages.error(request, "Mot de passe incorrect")
    context = {
        "user_form":user_form,
    }
    return render(request, 'registration/profile.html',context)


@login_required
def delete_profile_image(request,pk):
    User.objects.get(id=pk).image.delete(save=True)
    return redirect('profile')


@login_required
def card_checkout(request): 
    return render(request, 'card/checkout.html')

@csrf_exempt
def stripe_config(request):
    if request.method == 'GET':
        stripe_config = {'publicKey':config('STRIPE_PUBLISHABLE_KEY')}
        return JsonResponse(stripe_config, safe=False)
    
@csrf_exempt
def create_checkout_session(request):
    if request.method == 'GET':
        domain_url = 'http://localhost:8000/payment/'
        stripe.api_key = config('STRIPE_SECRET_KEY')
        try:
            price_id = 'price_1R1rFmKa65RVF9Bfl5KtTxIi'
            # product_id = 'prod_RvihzTwM7mPh47'

            # product = stripe.Product.retrieve(product_id)
            # prices = stripe.Price.list(product=product_id)
            # price = prices.data[0]
            # product_price = price.unit_amount / 100.0

            checkout_session = stripe.checkout.Session.create(
                success_url=domain_url + 'success?session_id={CHECKOUT_SESSION_ID}',
                cancel_url=domain_url + 'cancelled',
                payment_method_types=['card'],
                mode='payment',
                customer_creation = 'always',
                line_items=[
                    {
                        'price': price_id,
                        'quantity': 1,
                    }
                ]
            )
            # return JsonResponse({'sessionId': checkout_session['id']})
            return redirect(checkout_session.url, code =303)
        except Exception as e:
            return JsonResponse({'error': str(e)})


@login_required()
def member_json_data(request):
    user = request.user
    
    member_full_name = f"Boboss"
    member_address = f"Paris 75"
    member_phone = f"068923128712"
    member_enterprise = f"APEX LATH"
    member_card_expiration_date = datetime.date.today()
    aaed_website = f"https://lesautoentrepreneursafricains.com"

    data = [
        {
            "name": user.first_name + " "+user.last_name,
            "address": user.adresse,
            "phone": user.telephone,
            "image": user.image.url,
            "enterprise": user.entreprise,
            "card_expiration_date": member_card_expiration_date,
            "website": aaed_website,
            "id": "12345-56789",
        }
    ]

    return JsonResponse(data, safe=False)


@login_required
def member_card_details(request):
    return render(request, 'member_card/card_details.html')


@login_required
def activate_member(request,pk):
    user = User.objects.get(id=pk)
    user.frais_carte = True
    user.save()
    messages.success(request, f"Vous avez activé {user.first_name} {user.last_name}")
    return redirect('home')
