//////////////////////////////// TESTING USER FETCHING FROM ANOTHER SHEET ////////////////////////////////

function fetchUserData_TEST() {
  var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ResponseSheet TEST");
  var destinationSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Users_to_WE TEST");

  var sourceData = sourceSheet.getDataRange().getValues();
  var destinationData = destinationSheet.getDataRange().getValues();

  if (destinationData.length < sourceData.length) {
    var newRows = sourceData.slice(destinationData.length);
    for (var i = 0; i < newRows.length; i++) {
      var row = destinationData.length + i + 1; // 1-based index
      var email = newRows[i][1];
      var phone = newRows[i][2];
      phone = (phone.length === 10) ? "91" + phone : phone;
      var name = newRows[i][3];

      if (name && email && phone) {
        var prefix = "test1_"
        var startCounter = 300000
        var uniqueUserId = generateUserId(row, prefix, startCounter);
        destinationSheet.getRange(row, 1).setValue(uniqueUserId);
        destinationSheet.getRange(row, 2).setValue(email);
        destinationSheet.getRange(row, 3).setValue(phone);
        destinationSheet.getRange(row, 4).setValue(name);
        destinationSheet.getRange(row, 5).setValue("TRUE");
      }
    }
  }
  print("Done Test Fetching!");
}

//////////////////////////////// TESTING USER INTEGRATING API ////////////////////////////////

function pushUsersDataToWE_TEST_USERS() {
  var mapper_keys = map_keys('Users_to_WE TEST')
  SpreadsheetApp.flush()

  fetchUserData_TEST();

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE TEST');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var headers = {
    "Authorization": "Bearer " + webEngageApiKey,
    "Content-Type": "application/json"
  }

  var usersUrl = webEngageUrl + "v1/accounts/" + webEngageLicense + "/bulk-users";

  var userList = [];
  var batchSize = 25;

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status !== "Success" && status !== "Error" && status !== "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      var email = String(currentRow[mapper_keys['email']]);
      var mobile = String(currentRow[mapper_keys['phone']]);
      var name = String(currentRow[mapper_keys['first_name']]);

      if (email != "#ERROR!" && mobile != "#ERROR!" && name != "#ERROR!" && mobile.length >= 10) {
        var user = {
          'userId': user_id,
          'email': email,
          'firstName': name,
          'phone': mobile,
          'whatsappOptIn': true,
        };
        userList.push(user)

        if (userList.length === batchSize) {
          var payload = { "users": userList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
          }

          var userList = [];
        }
        if (idx % 100 === 0) {
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('User Integrated');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }
  if (userList.length > 0) {
    var payload = { "users": userList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(usersUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
    }
    print(uploadResponse)
  }

  print("Done Test Integration!");
}

//////////////////////////////// TESTING EVENT API ////////////////////////////////

function pushUsersDataToWE_TEST_EVENTS() {
  var mapper_keys = map_keys('Users_to_WE TEST')
  SpreadsheetApp.flush()

  var webEngageSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Users_to_WE TEST');

  var StartRow = 2;
  var RowRange = webEngageSheet.getLastRow() - StartRow + 1;
  var WholeRange = webEngageSheet.getRange(StartRow, 1, RowRange, 6);
  var AllValues = WholeRange.getDisplayValues();

  var headers = {
    "Authorization": "Bearer " + webEngageApiKey,
    "Content-Type": "application/json"
  }

  var eventUserList = [];
  var batchSize = 25;

  var eventsUrl = webEngageUrl + "v1/accounts/" + webEngageLicense + "/bulk-events";

  var eventName = "Testing User Event 2";

  for (var idx in AllValues) {
    var currentRow = AllValues[idx];
    var status = currentRow[mapper_keys['status']];

    if (status === "User Integrated") {
      var user_id = String(currentRow[mapper_keys['user_id']]);
      if (user_id) {
        var eventUser = {
          "userId": user_id,
          "eventName": eventName
        };
        eventUserList.push(eventUser)

        if (eventUserList.length === batchSize) {
          var payload = { "events": eventUserList }
          payload = JSON.stringify(payload);

          var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

          if (respStatus != 201) {
            print(payload);
            print(respStatus);
          }

          var eventUserList = [];
        }
        if (idx % 100 === 0) {
          Utilities.sleep(5000);
        }
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Success');
      }
      else {
        webEngageSheet.getRange(parseInt(idx) + StartRow, mapper_keys['status'] + 1).setValue('Error');
      }
    }
  }

  if (eventUserList.length > 0) {
    var payload = { "events": eventUserList }
    payload = JSON.stringify(payload);

    var [uploadResponse, respStatus] = callApi(eventsUrl, "post", payload, headers);

    if (respStatus != 201) {
      print(payload);
      print(respStatus);
    }
    print(uploadResponse)
    print(payload)
    print(respStatus)
  }

  print("Done Test Event!")
}