from django.views.generic import TemplateView
from django.conf import settings
from _keenthemes.__init__ import KTLayout
from _keenthemes.libs.theme import KTTheme
from django.shortcuts import render, redirect
from authentication.forms import PasswordResetForm
from authentication.models import User
from django.contrib import messages

from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth.tokens import PasswordResetTokenGenerator
from django.utils.http import urlsafe_base64_encode
from django.utils.encoding import force_bytes, force_str
from django.urls import reverse
from django.core.mail import send_mail
"""
This file is a view controller for multiple pages as a module.
Here you can override the page view layout.
Refer to urls.py file for more pages.
"""


def password_reset(request):

    # dd("deepak")
        try: 
            form = request.POST 
            email=form['email']

            if not email:
                messages.error(request, 'Please enter an email.')
                return redirect('/reset-password')
            user = User.objects.get(email=email)
            if user:
                encoded_pk = urlsafe_base64_encode(force_bytes(user.pk))
                token = PasswordResetTokenGenerator().make_token(user)
                print(token)
                reset_url = reverse("namespace-name:new-password", kwargs={"encoded_pk": encoded_pk, "token": token})
                base_url= request.build_absolute_uri('/')[:-1]
                
            
                reset_link = f"{base_url}{reset_url}"
                email_body =f"Your password reset link: {reset_link}"


                send_mail("Reset Your  Excitech password",f"""Someone (hopefully you) has requested a password reset for your excitech account.
                Follow the link to set a new password:{reset_link}""", 'deepakchandrawanshi5050@mail.com', (user.email,),fail_silently=False)

            messages.success(request,f'We have sent you a link to {user.email} to  reset your password',)
            
            return redirect('/reset-password')
        except User.DoesNotExist:
            messages.error(request, "User with this email does not exist.")
            return redirect('/reset-password')
    

   

class AuthResetPasswordView(TemplateView):
    template_name = 'pages/auth/reset-password.html'

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super().get_context_data(**kwargs)

        # A function to init the global layout. It is defined in _keenthemes/__init__.py file
        context = KTLayout.init(context)

        KTTheme.addJavascriptFile('js/custom/authentication/reset-password/reset-password.js')

        # Define the layout for this module
        # _templates/layout/auth.html
        context.update({
            'layout': KTTheme.setLayout('auth.html', context),
        })

        return context

    
