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

<cfscript>
/**
 * Cleanup Lazy Daisy Beacons
 * - Unassigns beacons 7, 8, 9 from service points
 * - Deletes beacons 7, 8, 9
 * - Updates original beacons with proper names
 */
response = { "OK": false, "steps": [] };

try {
    lazyDaisyID = 37;

    // Unassign beacons 7, 8, 9 from any service points
    queryExecute("
        UPDATE ServicePoints
        SET BeaconID = NULL, AssignedByUserID = NULL
        WHERE BeaconID IN (7, 8, 9) AND BusinessID = :bizId
    ", { bizId: lazyDaisyID }, { datasource: "payfrit" });
    response.steps.append("Unassigned beacons 7, 8, 9 from service points");

    // Delete duplicate beacons 7, 8, 9
    queryExecute("
        DELETE FROM Beacons
        WHERE ID IN (7, 8, 9) AND BusinessID = :bizId
    ", { bizId: lazyDaisyID }, { datasource: "payfrit" });
    response.steps.append("Deleted duplicate beacons 7, 8, 9");

    // Update original beacons with names based on their service point assignments
    queryExecute("
        UPDATE Beacons SET Name = 'Beacon - Table 1'
        WHERE ID = 4 AND BusinessID = :bizId
    ", { bizId: lazyDaisyID }, { datasource: "payfrit" });
    response.steps.append("Updated Beacon 4 name to 'Beacon - Table 1'");

    queryExecute("
        UPDATE Beacons SET Name = 'Beacon - Table 2'
        WHERE ID = 5 AND BusinessID = :bizId
    ", { bizId: lazyDaisyID }, { datasource: "payfrit" });
    response.steps.append("Updated Beacon 5 name to 'Beacon - Table 2'");

    queryExecute("
        UPDATE Beacons SET Name = 'Beacon - Table 3'
        WHERE ID = 6 AND BusinessID = :bizId
    ", { bizId: lazyDaisyID }, { datasource: "payfrit" });
    response.steps.append("Updated Beacon 6 name to 'Beacon - Table 3'");

    // Get final status
    qFinal = queryExecute("
        SELECT sp.ID AS ServicePointID, sp.BeaconID, sp.BusinessID AS BusinessID,
               b.Name AS BeaconName, b.UUID, sp.Name AS ServicePointName,
               biz.Name AS BusinessName
        FROM ServicePoints sp
        JOIN Beacons b ON b.ID = sp.BeaconID
        JOIN Businesses biz ON biz.ID = sp.BusinessID
        WHERE sp.BusinessID = :bizId AND sp.BeaconID IS NOT NULL
        ORDER BY sp.BeaconID
    ", { bizId: lazyDaisyID }, { datasource: "payfrit" });

    beacons = [];
    for (i = 1; i <= qFinal.recordCount; i++) {
        arrayAppend(beacons, {
            "BeaconID": qFinal.BeaconID[i],
            "BeaconName": qFinal.BeaconName[i],
            "UUID": qFinal.UUID[i],
            "BusinessName": qFinal.BusinessName[i],
            "ServicePointID": qFinal.ServicePointID[i],
            "ServicePointName": qFinal.ServicePointName[i]
        });
    }

    response.OK = true;
    response.beacons = beacons;

} catch (any e) {
    response.error = e.message;
    if (len(e.detail)) {
        response.detail = e.detail;
    }
}

writeOutput(serializeJSON(response));
</cfscript>
