const logger = require('winston');
const passport = require('passport');

module.exports = (app) => {
  // route for sign up
  app.post('/signup', passport.authenticate('local-signup'), (req, res) => {
    logger.verbose(`successful signup for ${req.user.channelName}`);
    res.status(200).json({
      success       : true,
      channelName   : req.user.channelName,
      channelClaimId: req.user.channelClaimId,
      shortChannelId: req.user.shortChannelId,
    });
  });
  // route for log in
  app.post('/login', (req, res, next) => {
    passport.authenticate('local-login', (err, user, info) => {
      logger.debug('info:', info);
      if (err) {
        return next(err);
      }
      if (!user) {
        return res.status(400).json({
          success: false,
          message: info.message,
        });
      }
      logger.debug('successful login');
      req.logIn(user, (err) => {
        if (err) {
          return next(err);
        }
        return res.status(200).json({
          success       : true,
          channelName   : req.user.channelName,
          channelClaimId: req.user.channelClaimId,
          shortChannelId: req.user.shortChannelId,
        });
      });
    })(req, res, next);
  });
  // route to log out
  app.get('/logout', (req, res) => {
    req.logout();
    res.status(200).json({success: true, message: 'you successfully logged out'});
  });
  // see if user is authenticated, and return credentials if so
  app.get('/user', (req, res) => {
    if (req.user) {
      res.status(200).json({success: true, data: req.user});
    } else {
      res.status(401).json({success: false, message: 'user is not logged in'});
    }
  });
};