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

<cfscript>
// Show all beacons with their current business/service point assignments
q = queryTimed("
  SELECT
    b.ID,
    b.UUID,
    b.Name,
    sp_link.BusinessID AS BusinessID,
    sp_link.ID AS ServicePointID,
    biz.Name,
    sp.Name AS Name
  FROM Beacons b
  LEFT JOIN ServicePoints sp_link ON sp_link.BeaconID = b.ID
  LEFT JOIN Businesses biz ON biz.ID = sp_link.BusinessID
  LEFT JOIN ServicePoints sp ON sp.ID = sp_link.ID
  WHERE b.IsActive = 1
  ORDER BY b.ID
", {}, { datasource: "payfrit" });

rows = [];
for (row in q) {
  arrayAppend(rows, {
    "BeaconID": row.ID,
    "UUID": row.UUID,
    "Name": row.Name ?: "",
    "BusinessID": row.BusinessID ?: 0,
    "Name": row.Name ?: "",
    "ServicePointID": row.ServicePointID ?: 0,
    "Name": row.Name ?: ""
  });
}

// Also get service points for reference
spQuery = queryTimed("
  SELECT sp.ID, sp.Name AS Name, sp.BusinessID AS BusinessID, b.Name AS Name
  FROM ServicePoints sp
  JOIN Businesses b ON b.ID = sp.BusinessID
  ORDER BY sp.BusinessID, sp.ID
", {}, { datasource: "payfrit" });

servicePoints = [];
for (sp in spQuery) {
  arrayAppend(servicePoints, {
    "ServicePointID": sp.ID,
    "Name": sp.Name,
    "BusinessID": sp.BusinessID,
    "Name": sp.Name
  });
}

writeOutput(serializeJSON({
  "OK": true,
  "BEACONS": rows,
  "SERVICE_POINTS": servicePoints
}));
</cfscript>
