<cfsetting showdebugoutput="false">
<cfsetting enablecfoutputonly="true">
<cfcontent type="application/json; charset=utf-8" reset="true">
<cfheader name="Cache-Control" value="no-store">

<cfscript>
/*
  PATH: /api/portal/team.cfm

  INPUT (JSON):
    { "BusinessID": 17 }

  OUTPUT (JSON):
    { OK: true, TEAM: [ { EmployeeID, UserID, Name, Email, Phone, StatusID, StatusName, IsActive } ] }
*/

function apiAbort(required struct payload) {
  writeOutput(serializeJSON(payload));
  abort;
}

function readJsonBody() {
  var raw = getHttpRequestData().content;
  if (isNull(raw)) raw = "";
  if (!len(trim(raw))) return {};
  try {
    var data = deserializeJSON(raw);
    if (isStruct(data)) return data;
  } catch (any e) {}
  return {};
}

data = readJsonBody();
businessId = structKeyExists(data, "BusinessID") ? val(data.BusinessID) : 0;

if (businessId <= 0) {
  apiAbort({ "OK": false, "ERROR": "missing_business_id" });
}

try {
  // Get employees for this business with user details
  qTeam = queryExecute("
    SELECT
      e.EmployeeID,
      e.UserID,
      e.EmployeeStatusID,
      e.EmployeeIsActive,
      u.UserFirstName,
      u.UserLastName,
      u.UserEmailAddress,
      u.UserContactNumber,
      CASE e.EmployeeStatusID
        WHEN 0 THEN 'Pending'
        WHEN 1 THEN 'Invited'
        WHEN 2 THEN 'Active'
        WHEN 3 THEN 'Suspended'
        ELSE 'Unknown'
      END AS StatusName
    FROM lt_Users_Businesses_Employees e
    JOIN Users u ON e.UserID = u.UserID
    WHERE e.BusinessID = ?
    ORDER BY e.EmployeeIsActive DESC, u.UserFirstName ASC
  ", [
    { value: businessId, cfsqltype: "cf_sql_integer" }
  ], { datasource: "payfrit" });

  team = [];
  for (row in qTeam) {
    arrayAppend(team, {
      "EmployeeID": row.EmployeeID,
      "UserID": row.UserID,
      "Name": trim(row.UserFirstName & " " & row.UserLastName),
      "FirstName": row.UserFirstName,
      "LastName": row.UserLastName,
      "Email": row.UserEmailAddress,
      "Phone": row.UserContactNumber,
      "StatusID": row.EmployeeStatusID,
      "StatusName": row.StatusName,
      "IsActive": row.EmployeeIsActive == 1
    });
  }

  writeOutput(serializeJSON({
    "OK": true,
    "TEAM": team,
    "COUNT": arrayLen(team)
  }));
  abort;

} catch (any e) {
  apiAbort({
    "OK": false,
    "ERROR": "server_error",
    "MESSAGE": e.message
  });
}
</cfscript>
