/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

MARIONETTE_TIMEOUT = 60000;
MARIONETTE_HEAD_JS = "head.js";

function setEmulatorAPN() {
  let apn = [
    [{"carrier":"T-Mobile US",
      "apn":"epc.tmobile.com",
      "mmsc":"http://mms.msg.eng.t-mobile.com/mms/wapenc",
      "types":["default","supl","mms","ims","dun", "fota"]}]
  ];

  return setSettings(SETTINGS_KEY_DATA_APN_SETTINGS, apn);
}

// Test initial State
function testInitialState() {
  log("= testInitialState =");

  // Data should be off before starting any test.
  return getSettings(SETTINGS_KEY_DATA_ENABLED)
    .then(value => {
      is(value, false, "Data must be off");
    });
}

// Test default data Connection
function testDefaultDataConnection() {
  log("= testDefaultDataConnection =");

  // Enable default data
  return setDataEnabledAndWait(true)
    // Disable default data
    .then(() => setDataEnabledAndWait(false));
}

// Test non default data connection
function testNonDefaultDataConnection() {
  log("= testNonDefaultDataConnection =");

  function doTestNonDefaultDataConnection(type) {
    log("doTestNonDefaultDataConnection: " + type);

    return setupDataCallAndWait(type)
      .then(() => deactivateDataCallAndWait(type));
  }

  let currentApn;
  return getSettings(SETTINGS_KEY_DATA_APN_SETTINGS)
    .then(value => {
      currentApn = value;
    })
    .then(setEmulatorAPN)
    .then(() => doTestNonDefaultDataConnection(NETWORK_TYPE_MOBILE_MMS))
    .then(() => doTestNonDefaultDataConnection(NETWORK_TYPE_MOBILE_SUPL))
    .then(() => doTestNonDefaultDataConnection(NETWORK_TYPE_MOBILE_IMS))
    .then(() => doTestNonDefaultDataConnection(NETWORK_TYPE_MOBILE_DUN))
    .then(() => doTestNonDefaultDataConnection(NETWORK_TYPE_MOBILE_FOTA))
    // Restore APN settings
    .then(() => setSettings(SETTINGS_KEY_DATA_APN_SETTINGS, currentApn));
}

// Start test
startTestBase(function() {
  return testInitialState()
    .then(() => testDefaultDataConnection())
    .then(() => testNonDefaultDataConnection());
});
