text: 'use strict';
  
  /**
   * Module dependencies.
   */
  var passport = require('passport'),
    FacebookStrategy = require('passport-facebook').Strategy,
    users = require('../../controllers/users.server.controller');
  
  module.exports = function (config) {
    // Use facebook strategy
    passport.use(new FacebookStrategy({
        clientID: config.facebook.clientID,
        clientSecret: config.facebook.clientSecret,
        callbackURL: config.facebook.callbackURL,
        profileFields: ['id', 'name', 'displayName', 'emails', 'photos'],
        passReqToCallback: true
      },
      function (req, accessToken, refreshToken, profile, done) {
        // Set the provider data and include tokens
        var providerData = profile._json;
        providerData.accessToken = accessToken;
        providerData.refreshToken = refreshToken;
  
        // Create the user OAuth profile
        var providerUserProfile = {
          firstName: profile.name.givenName,
          lastName: profile.name.familyName,
          displayName: profile.displayName,
          email: profile.emails ? profile.emails[0].value : undefined,
          username: profile.username || generateUsername(profile),
          profileImageURL: (profile.id) ? '//graph.facebook.com/' + profile.id + '/picture?type=large' : undefined,
          provider: 'facebook',
          providerIdentifierField: 'id',
          providerData: providerData
        };
  
        // Save the user OAuth profile
        users.saveOAuthUserProfile(req, providerUserProfile, done);
  
        function generateUsername(profile) {
          var username = '';
  
          if (profile.emails) {
            username = profile.emails[0].value.split('@')[0];
          } else if (profile.name) {
            username = profile.name.givenName[0] + profile.name.familyName;
          }
  
          return username.toLowerCase() || undefined;
        }
      }
    ));
  };
  