# coding: utf-8

from __future__ import absolute_import

from google.appengine.api import users
import flask

import auth
import model
import util

from main import app


@app.route('/signin/gae/')
def signin_gae():
  auth.save_request_params()
  gae_url = users.create_login_url(flask.url_for('gae_authorized'))
  return flask.redirect(gae_url)


@app.route('/api/auth/callback/gae/')
def gae_authorized():
  gae_user = users.get_current_user()
  if gae_user is None:
    flask.flash('You denied the request to sign in.')
    return flask.redirect(util.get_next_url())

  user_db = retrieve_user_from_gae(gae_user)
  return auth.signin_user_db(user_db)


def retrieve_user_from_gae(gae_user):
  auth_id = 'federated_%s' % gae_user.user_id()
  user_db = model.User.get_by('auth_ids', auth_id)
  if user_db:
    if not user_db.admin and users.is_current_user_admin():
      user_db.admin = True
      user_db.put()
    return user_db

  return auth.create_user_db(
    auth_id=auth_id,
    name=util.create_name_from_email(gae_user.email()),
    username=gae_user.email(),
    email=gae_user.email(),
    verified=True,
    admin=users.is_current_user_admin(),
  )