from rest_auth.serializers import PasswordResetSerializer
from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.tokens import default_token_generator
from django.contrib.sites.shortcuts import get_current_site
from django.utils.http import urlsafe_base64_encode
from django.utils.encoding import force_bytes
from django.conf import settings


class MyPasswordResetForm(PasswordResetForm):
    def save(self,
             domain_override=None,
             subject_template_name='registration/password_reset_subject.txt',
             email_template_name='registration/password_reset_email.html',
             use_https=False,
             token_generator=default_token_generator,
             from_email=None,
             request=None,
             html_email_template_name=None,
             extra_email_context=None):
        """
        Generate a one-use only link for resetting password and send it to the
        user.
        """
        email = self.cleaned_data["email"]
        for user in self.get_users(email):
            if not domain_override:
                current_site = get_current_site(request)
                site_name = current_site.name
                domain = current_site.domain
            else:
                site_name = domain = domain_override
            context = {
                'email': email,
                'domain': "api.digisave.ng",
                'site_name': 'Digisave.ng',
                'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(),
                'user': user,
                'token': token_generator.make_token(user),
                'protocol': 'https',
                **(extra_email_context or {}),
            }
            self.send_mail(
                subject_template_name,
                email_template_name,
                context,
                from_email,
                email,
                html_email_template_name=html_email_template_name,
            )


class MYPasswordResetSerializer(PasswordResetSerializer):
    password_reset_form_class = MyPasswordResetForm

    def get_email_options(self):
        """Override this method to change default e-mail options"""
        request = self.context.get('request')
        # Set some values to trigger the send_email method.
        request.path = '/app/forgot_password/'
        return {
            'domain_override': 'www.digisave.ng',
            'request': request,
            'email_template_name': 'password_reset_email.txt'
        }

    # def save(self):
    #     request = self.context.get('request')
    #     # Set some values to trigger the send_email method.
    #     request.path = '/app/forgot_password/'
    #     print(request.path)
    #     opts = {
    #         'use_https': request.is_secure(),
    #         'from_email': getattr(settings, 'DEFAULT_FROM_EMAIL'),
    #         'request': request,
    #     }

    #     opts.update(self.get_email_options())
    #     self.reset_form.save(**opts)
