<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/businesses/setHiring.cfm

  INPUT (JSON):
    { "BusinessID": 17, "IsHiring": true }

  OUTPUT (JSON):
    { OK: true, IsHiring: true } or { OK: false, ERROR: string }
*/

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;
isHiring = structKeyExists(data, "IsHiring") ? (data.IsHiring == true ? 1 : 0) : -1;

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

if (isHiring == -1) {
  apiAbort({ "OK": false, "ERROR": "missing_is_hiring" });
}

try {
  queryExecute("
    UPDATE Businesses
    SET BusinessIsHiring = ?
    WHERE BusinessID = ?
  ", [
    { value: isHiring, cfsqltype: "cf_sql_tinyint" },
    { value: businessId, cfsqltype: "cf_sql_integer" }
  ], { datasource: "payfrit" });

  writeOutput(serializeJSON({
    "OK": true,
    "IsHiring": isHiring == 1
  }));
  abort;

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