<cfsetting showdebugoutput="false">
<cfsetting enablecfoutputonly="true">
<cfcontent type="application/json; charset=utf-8" reset="true">

<cfscript>
data = {};
try {
  requestBody = toString(getHttpRequestData().content);
  if (len(requestBody)) data = deserializeJSON(requestBody);
} catch (any e) {}

businessId = structKeyExists(data, "BusinessID") ? val(data.BusinessID) : 0;
userId = structKeyExists(data, "UserID") ? val(data.UserID) : 0;
isActive = structKeyExists(data, "IsActive") ? (data.IsActive ? 1 : 0) : 1;

if (businessId <= 0 || userId <= 0) {
  writeOutput(serializeJSON({ "OK": false, "ERROR": "missing_params", "MESSAGE": "BusinessID and UserID required" }));
  abort;
}

try {
  // Update employee record
  queryExecute("
    UPDATE Employees
    SET IsActive = ?
    WHERE BusinessID = ? AND UserID = ?
  ", [
    { value: isActive, cfsqltype: "cf_sql_bit" },
    { value: businessId, cfsqltype: "cf_sql_integer" },
    { value: userId, cfsqltype: "cf_sql_integer" }
  ], { datasource: "payfrit" });

  // Get updated record
  q = queryExecute("
    SELECT e.ID, e.BusinessID, e.UserID, e.StatusID,
           CAST(e.IsActive AS UNSIGNED) AS IsActive,
           b.Name, u.FirstName, u.LastName
    FROM Employees e
    JOIN Businesses b ON e.BusinessID = b.ID
    JOIN Users u ON e.UserID = u.ID
    WHERE e.BusinessID = ? AND e.UserID = ?
  ", [
    { value: businessId, cfsqltype: "cf_sql_integer" },
    { value: userId, cfsqltype: "cf_sql_integer" }
  ], { datasource: "payfrit" });

  if (q.recordCount > 0) {
    writeOutput(serializeJSON({
      "OK": true,
      "MESSAGE": "Employee updated",
      "EMPLOYEE": {
        "EmployeeID": q.ID,
        "BusinessID": q.BusinessID,
        "Name": q.Name,
        "UserID": q.UserID,
        "UserName": trim(q.FirstName & " " & q.LastName),
        "StatusID": q.StatusID,
        "IsActive": q.IsActive
      }
    }));
  } else {
    writeOutput(serializeJSON({ "OK": false, "ERROR": "not_found", "MESSAGE": "Employee record not found" }));
  }
} catch (any e) {
  writeOutput(serializeJSON({ "OK": false, "ERROR": "server_error", "MESSAGE": e.message }));
}
</cfscript>
