<cfscript>
// Admin script to deactivate orphan items and their children
// Used to clean up stale items leftover from before the template system

param name="url.itemId" default="11543";
param name="url.action" default="check"; // "check" or "deactivate"

// Check the item first
qItem = queryExecute("
    SELECT ID, Name, ParentItemID, IsActive, IsCollapsible
    FROM Items
    WHERE ID = :itemId
", { itemId: url.itemId });

if (qItem.recordCount == 0) {
    writeOutput(serializeJSON({ OK: false, ERROR: "Item not found" }));
    abort;
}

// Get all children (direct only for display)
qChildren = queryExecute("
    SELECT ID, Name
    FROM Items
    WHERE ParentItemID = :itemId
", { itemId: url.itemId });

childList = [];
for (row in qChildren) {
    arrayAppend(childList, { "ItemID": row.ID, "Name": row.Name });
}

result = {
    "OK": true,
    "ACTION": url.action,
    "ITEM": {
        "ItemID": qItem.ID,
        "Name": qItem.Name,
        "ParentItemID": qItem.ParentItemID,
        "IsActive": qItem.IsActive,
        "IsCollapsible": qItem.IsCollapsible
    },
    "HAS_CHILDREN": qChildren.recordCount > 0,
    "CHILD_COUNT": qChildren.recordCount,
    "CHILDREN": childList
};

if (url.action == "deactivate") {
    // Deactivate children first
    queryExecute("
        UPDATE Items
        SET IsActive = 0
        WHERE ParentItemID = :itemId
    ", { itemId: url.itemId });

    // Then deactivate the parent
    queryExecute("
        UPDATE Items
        SET IsActive = 0
        WHERE ItemID = :itemId
    ", { itemId: url.itemId });

    result["DEACTIVATED"] = true;
    result["MESSAGE"] = "Item and #qChildren.recordCount# children deactivated successfully";
}

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