from email.mime.base import MIMEBase

from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth import get_user_model
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import EmailMessage, EmailMultiAlternatives
from django.shortcuts import render, redirect
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.views.decorators.csrf import csrf_exempt
from rest_framework.reverse import reverse

User = get_user_model()

@csrf_exempt
def forgot_password(request):
    if request.method == "POST":
        email = (request.POST.get('email')).lower()
        user = User.objects.filter(email=email,is_active=True,is_deleted=False).first()
        if user:
            uid = urlsafe_base64_encode(force_bytes(user.pk))
            token = default_token_generator.make_token(user)
            domain = get_current_site(request).domain
            reset_link = "/reset/" + uid + "/" + token
            reset_url = 'http://' + domain + reset_link
            mail_subject = 'Password Reset Request'
            html_message = render_to_string('forgot_password_reset_link_email.html', {
                'user': user,
                'reset_url': reset_url,
            })
            text_message = "Please click the link below to reset your password: " + reset_url

            email = EmailMultiAlternatives(
                subject=mail_subject,
                body=text_message,
                to=[email],
            )
            email.attach_alternative(html_message, "text/html")

            try:
                email.send()
                print("Password reset email sent successfully!")
            except Exception as e:
                print(f"Error sending email: {e}")
            # return redirect('login?message=Password+reset+link+sent!')
            return redirect("/login")

        else:
            return redirect('/login')

    return render(request, 'forgot_password_email.html')

@csrf_exempt
def forgot_password_reset_confirm(request, uidb64, token):
    try:
        uid = urlsafe_base64_decode(uidb64).decode()
        user = User.objects.get(pk=uid)
    except (TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None

    if user is not None and default_token_generator.check_token(user, token):
        if request.method == "POST":
            new_password = request.POST['password']
            confirm_password = request.POST['confirm_password']
            print(new_password,confirm_password)
            if new_password==confirm_password:
                user.set_password(new_password)
                user.save()
                print("password set")
            else:
                print("passwords do not match")
            # Redirect to a success page
            # return render(request, 'accounts/password_reset_complete.html')
            return redirect('/login')
        return render(request, 'forgot_password_new_password_set.html', {'uidb64': uidb64, 'token': token})
    # Handle invalid token or user not found
    return render(request, 'accounts/password_reset_invalid.html')
