from mozilla_django_oidc.auth import OIDCAuthenticationBackend
from mozilla_django_oidc.views import OIDCAuthenticationCallbackView
from .core_app.utils import finalize_user_creation
from django.http import HttpResponseRedirect

# Setup logging
import logging
logger = logging.getLogger(__name__)


class RosettaOIDCAuthenticationBackend(OIDCAuthenticationBackend):

    def create_user(self, claims):

        # Call parent user creation function
        user = super(RosettaOIDCAuthenticationBackend, self).create_user(claims)

        # Add profile, keys etc.
        finalize_user_creation(user, auth='oidc')

        return user

    def get_userinfo(self, access_token, id_token, payload):

        # Payload must contain the "email" key
        return payload


class RosettaOIDCAuthenticationCallbackView(OIDCAuthenticationCallbackView):

    def login_success(self):

        # Call parent login_success but do not return
        super(RosettaOIDCAuthenticationCallbackView, self).login_success()

        logger.debug('Trying to get cookie-based post login redirect')
        post_login_page = self.request.COOKIES.get('post_login_redirect')
        if post_login_page:
            logger.debug('Got "%s" and redirecting', post_login_page )
            response = HttpResponseRedirect(post_login_page)
            response.delete_cookie('post_login_redirect')
            return response
        else:
            logger.debug('No cookie-based post login redirect found, redirecting to "%s"', self.success_url)
            return HttpResponseRedirect(self.success_url)