from flask import flash, redirect, render_template, request, current_app, Blueprint, url_for
from flask_login import login_user, logout_user, login_required
from flask_principal import identity_changed, AnonymousIdentity, PermissionDenied

from ..models import User
from ..proxies import current_app
from ..utils.auth import is_safe_url

blueprint = Blueprint('auth', __name__,
                      template_folder='../templates', static_folder='../static')


@blueprint.route('/auth/login', methods=['GET', 'POST'])
def login():

    providers = current_app.auth_providers

    if len(providers) == 1:
        return redirect(url_for('auth_provider.{}.prompt'.format(providers[0].name)))

    return render_template(
        'auth-switcher.html',
        providers=[{'name': provider.name, 'icon_uri': provider.icon_uri, 'link_text': provider.link_text} for provider in providers]
    )


@blueprint.route("/auth/logout")
@login_required
def logout():
    logout_user()

    # Notify flask principal that the user has logged out
    identity_changed.send(current_app._get_current_object(),
                          identity=AnonymousIdentity())

    return redirect(url_for('index.render_feed'))