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

<cfscript>
// Switch beacon mapping from one business to another via join table.
// Beacons.BusinessID (owner) is NOT touched.
fromBiz = 17;  // In-N-Out
toBiz = 27;    // Big Dean's

// Remove mapping for source business
queryTimed("
    DELETE FROM lt_BeaconsID_BusinessesID
    WHERE BusinessID = :fromBiz
", { fromBiz: fromBiz }, { datasource: "payfrit" });

// Add mapping for target business (for beacons owned by source)
queryTimed("
    INSERT INTO lt_BeaconsID_BusinessesID (BeaconID, BusinessID)
    SELECT ID, :toBiz FROM Beacons WHERE BusinessID = :fromBiz
    ON DUPLICATE KEY UPDATE ID = ID
", { toBiz: toBiz, fromBiz: fromBiz }, { datasource: "payfrit" });

// Clear ServicePoints.BeaconID for source business (no longer valid)
queryTimed("
    UPDATE ServicePoints
    SET BeaconID = NULL, AssignedByUserID = NULL
    WHERE BusinessID = :fromBiz AND BeaconID IS NOT NULL
", { fromBiz: fromBiz }, { datasource: "payfrit" });

// Get current state
q = queryTimed("
    SELECT sp.ID AS ServicePointID, sp.BeaconID, sp.BusinessID AS BusinessID,
           b.Name AS BeaconName, biz.Name AS BusinessName,
           sp.Name AS ServicePointName
    FROM ServicePoints sp
    JOIN Beacons b ON b.ID = sp.BeaconID
    JOIN Businesses biz ON biz.ID = sp.BusinessID
    WHERE sp.BeaconID IS NOT NULL
", {}, { datasource: "payfrit" });

rows = [];
for (row in q) {
    arrayAppend(rows, {
        "BeaconID": row.BeaconID,
        "BeaconName": row.BeaconName,
        "BusinessID": row.BusinessID,
        "BusinessName": row.BusinessName,
        "ServicePointID": row.ServicePointID,
        "ServicePointName": row.ServicePointName
    });
}

writeOutput(serializeJSON({
    "OK": true,
    "MESSAGE": "Switched beacons from BusinessID #fromBiz# to #toBiz#",
    "MAPPINGS": rows
}));
</cfscript>
