<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, "BusinessID") || !isNumeric(request.BusinessID) || request.BusinessID LTE 0) {
  apiAbort({ OK=false, ERROR="no_business_selected" });
}

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

servicePointId = int(data.ServicePointID);
</cfscript>

<cfquery name="q" datasource="payfrit">
  SELECT
    ID,
    BusinessID,
    Name,
    Code,
    TypeID,
    IsActive,
    SortOrder
  FROM ServicePoints
  WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#servicePointId#">
    AND BusinessID = <cfqueryparam cfsqltype="cf_sql_integer" value="#request.BusinessID#">
  LIMIT 1
</cfquery>

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

<cfset servicePoint = {
  "ServicePointID"    = q.ID,
  "BusinessID"        = q.BusinessID,
  "Name"  = q.Name,
  "Code"  = q.Code,
  "TypeID"= q.TypeID,
  "IsActive"          = q.IsActive,
  "SortOrder"         = q.SortOrder
}>

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