Meteor._debug("Loading server/sso");

// Cause an error on startup if the Drupal server is unreachable.
Meteor.startup(function () {
  Meteor._debug("Startup server/sso", CHANNEL_NAME, EVENT_NAME);

  sso = new DrupalSSO();
  sso.initServerState(Meteor.settings);

  if (!sso.state.online) {
    throw new Meteor.Error('startup', "Could not reach the Drupal server.");
  }
});

Meteor.methods({
  /**
   * Parse Meteor settings to initialize the SSO state from the server.
   */
  "drupal-sso.initState": function () {
    var settings = Meteor.settings['drupal-sso'];
    var site = settings.site;
    var appToken = settings.appToken;

    if (!settings) {
      throw new Meteor.Error('invalid-settings', "Invalid settings: 'drupal-sso' key not found.");
    }
    if (!site) {
      throw new Meteor.Error('invalid-settings', "Invalid settings: 'drupal-sso.site' key not found.");
    }
    if (!appToken) {
      throw new Meteor.Error('invalid-settings', "Invalid settings: 'drupal-sso.appToken' key not found.");
    }

    var options = {
      params: {
        appToken: settings.appToken
      }
    };
    try {
      var ret = HTTP.get(site + "/meteor/siteInfo", options);
      info = JSON.parse(ret.content);
      info.online = true;
    }
    catch (err) {
      info = {
        cookieName: undefined,
        anonymousName: undefined,
        online: false
      };
      Meteor._debug("Error: ", err);
    }
    return info;
  },

  /**
   *
   * @param {string} cookieBlob
   * @returns {*}
   */
  "drupal-sso.whoami": function (cookieBlob) {
    // sso is a package global, initialized in server/sso.js Meteor.startup().
    var cookieName = sso.state.cookieName;
    var cookieValue = sso.getSessionCookie(cookieBlob);
    var url = sso.settings['drupal-sso'].site + "/meteor/whoami";

    var options = {
      headers: {
        'cookie': cookieName + '=' + cookieValue
      }
    };
    Meteor._debug('Checking ' + cookieName + "=" + cookieValue + ' on ' + url);
    try {
      var ret = HTTP.get(url, options);
      info = JSON.parse(ret.content);
    }
    catch (err) {
      info = {
        'uid': 0,
        'name': 'Unresolved',
        'roles': []
      };
      Meteor._debug("Error: ", err);
    }

    return info;
  }
});