<cfsetting showdebugoutput="false">
<cfsetting enablecfoutputonly="true">

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

<cfscript>
function apiAbort(obj) {
  writeOutput(serializeJSON(obj));
  abort;
}

function readJsonBody() {
  raw = toString(getHttpRequestData().content);
  if (isNull(raw) || len(trim(raw)) EQ 0) return {};
  try {
    parsed = deserializeJSON(raw);
  } catch(any e) {
    apiAbort({ OK=false, ERROR="bad_json", MESSAGE="Invalid JSON body" });
  }
  if (!isStruct(parsed)) return {};
  return parsed;
}

data = readJsonBody();

if (!structKeyExists(request, "UserID") || !isNumeric(request.UserID) || request.UserID LTE 0) {
  apiAbort({ OK=false, ERROR="not_logged_in" });
}
if (!structKeyExists(request, "BusinessID") || !isNumeric(request.BusinessID) || request.BusinessID LTE 0) {
  apiAbort({ OK=false, ERROR="no_business_selected" });
}

if (!structKeyExists(data, "BeaconID") || !isNumeric(data.BeaconID) || int(data.BeaconID) LTE 0) {
  apiAbort({ OK=false, ERROR="missing_beacon_id", MESSAGE="BeaconID is required" });
}

beaconId = int(data.BeaconID);
</cfscript>

<cfquery datasource="#application.datasource#">
  UPDATE Beacons
  SET IsActive = 0
  WHERE BeaconID = <cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">
    AND BusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">
</cfquery>

<!--- confirm --->
<cfquery name="qCheck" datasource="#application.datasource#">
  SELECT BeaconID, IsActive
  FROM Beacons
  WHERE BeaconID = <cfqueryparam cfsqltype="cf_sql_integer" value="#beaconId#">
    AND BusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">
  LIMIT 1
</cfquery>

<cfif qCheck.recordCount EQ 0>
  <cfoutput>#serializeJSON({ OK=false, ERROR="not_found" })#</cfoutput>
  <cfabort>
</cfif>

<cfoutput>#serializeJSON({ OK=true, ERROR="", BeaconID=beaconId })#</cfoutput>
