'use strict';

const Router = require('koa-router');
const router = new Router();

const passport = require('koa-passport');
const {Strategy} = require('passport-twitter');
const mongoose = require('mongoose');
const User = mongoose.model('users');

passport.serializeUser(function(user, done) {
  done(null, user._id);
});

passport.deserializeUser(function(id, done) {
  User.findById(id).exec(done);
});

passport.use(new Strategy({
  consumerKey: process.env.TWITTER_CONSUMER_KEY,
  consumerSecret: process.env.TWITTER_CONSUMER_SECRET,
  callbackURL: process.env.TWITTER_CALLBACK_URL
}, User.createByTwitter.bind(User)));

router.get('/signin', passport.authenticate('twitter'));

router.get('/callback', passport.authenticate('twitter', {
  successRedirect: 'back',
  failureRedirect: 'back'
}));

router.get('/signout', function*(){
  this.logout();
  this.redirect('back');
});

router.get('/current.:ext?', function*(){
  if (this.isAuthenticated()) {
    this.body = {data: {user: this.passport.user}};
  } else {
    this.throw(401);
  }
});

module.exports = {
  api: false,
  namespace: '/session',
  middleware: router.middleware()
};
