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

<cfscript>
// Update beacon mapping via join table. Owner (Beacons.BusinessID) is NOT changed.
beaconId = 2;
oldBusinessId = 37;  // previous mapping
newBusinessId = 17;

// Remove old mapping
queryTimed("
    DELETE FROM lt_BeaconsID_BusinessesID
    WHERE BeaconID = :beaconId AND BusinessID = :oldBizId
", { beaconId: beaconId, oldBizId: oldBusinessId }, { datasource: "payfrit" });

// Add new mapping
queryTimed("
    INSERT INTO lt_BeaconsID_BusinessesID (BeaconID, BusinessID)
    VALUES (:beaconId, :newBizId)
    ON DUPLICATE KEY UPDATE ID = ID
", { beaconId: beaconId, newBizId: newBusinessId }, { datasource: "payfrit" });

// Clear ServicePoints.BeaconID for old business where this beacon was assigned
queryTimed("
    UPDATE ServicePoints
    SET BeaconID = NULL, AssignedByUserID = NULL
    WHERE BeaconID = :beaconId AND BusinessID = :oldBizId
", { beaconId: beaconId, oldBizId: oldBusinessId }, { datasource: "payfrit" });

// Get current state
q = queryTimed("
    SELECT
        b.ID AS BeaconID,
        b.UUID,
        b.Name AS BeaconName,
        b.BusinessID AS BeaconBusinessID,
        sp.ID AS ServicePointID,
        sp.Name AS ServicePointName,
        sp.BusinessID AS ServicePointBusinessID,
        biz.Name AS BusinessName
    FROM Beacons b
    LEFT JOIN ServicePoints sp ON sp.BeaconID = b.ID
    LEFT JOIN Businesses biz ON biz.ID = b.BusinessID
    WHERE b.IsActive = 1
    ORDER BY b.ID
", {}, { datasource: "payfrit" });

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

writeOutput(serializeJSON({
    "OK": true,
    "MESSAGE": "Updated beacon #beaconId# to BusinessID #newBusinessId#",
    "BEACONS": rows
}));
</cfscript>
