// Store the preference locale in cookies and (if available) session to use
// on next requests.


'use strict';


var LOCALE_COOKIE_MAX_AGE = 0xFFFFFFFF; // Maximum 32-bit unsigned integer.


module.exports = function (N, apiPath) {
  N.validate(apiPath, {
    locale: {
      type: 'string'
    , enum: N.config.locales.enabled
    }
  });

  N.wire.on(apiPath, function set_language(env, callback) {
    env.extras.setCookie('locale', env.params.locale, {
      path: '/'
    , maxAge: LOCALE_COOKIE_MAX_AGE
    });

    if (env.session) {
      env.session.locale = env.params.locale;
    }

    if (env.session && env.session.user_id) {
      N.models.users.User.findById(env.session.user_id, function (err, user) {
        if (err) {
          callback(err);
          return;
        }

        user.locale = env.params.locale;
        user.save(callback);
      });
    } else {
      callback();
    }
  });
};

@@ -108,16 +108,45 @@
 ict';%0A%0A%0A
+var _ = require('lodash');%0A%0A%0A
 var LOCA
@@ -293,22 +293,16 @@
 ocale: %7B
-%0A     
  type: '
@@ -312,49 +312,8 @@
 ing'
-%0A    , enum: N.config.locales.enabled%0A   
  %7D%0A 
@@ -386,50 +386,274 @@
     
-env.ext
+var locale = env.params.locale;%0A%0A    if (!_.contains(N.config.locales.enabled, env.pa
 ra
+m
 s.
-setCookie('locale',
+locale)) %7B%0A      // User sent a non-existent or disabled locale - reply with the default.%0A      locale = N.config.locales%5B'default'%5D;%0A    %7D%0A%0A   
  env.
-pa
+ext
 ra
-m
 s.
+setCookie('locale', 
 loca
@@ -765,35 +765,24 @@
 on.locale = 
-env.params.
 locale;%0A    
@@ -1000,35 +1000,24 @@
 er.locale = 
-env.params.
 locale;%0A    

use default locale if user sent something wrong.