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

<!--- Only allow from localhost --->
<cfif NOT (cgi.remote_addr EQ "127.0.0.1" OR cgi.remote_addr EQ "::1" OR findNoCase("localhost", cgi.server_name))>
    <cfoutput>#serializeJSON({"OK": false, "ERROR": "admin_only"})#</cfoutput>
    <cfabort>
</cfif>

<cfscript>
/**
 * Delete Orphan Modifiers for In and Out Burger (BusinessID=17)
 *
 * This script deletes duplicate modifier items that are no longer needed
 * because we now use ItemTemplateLinks.
 *
 * The orphan items are level-1 modifiers (direct children of parent items)
 * that have been replaced by template links.
 */

response = { "OK": false, "deleted": [], "errors": [] };

try {
    businessID = 17; // In and Out Burger

    // Get all level-1 modifiers that are NOT templates
    // These are the duplicates we want to delete
    qOrphans = queryExecute("
        SELECT
            m.ItemID,
            m.ItemName,
            m.ItemParentItemID,
            p.ItemName as ParentName
        FROM Items m
        INNER JOIN Items p ON p.ItemID = m.ItemParentItemID
        INNER JOIN Categories c ON c.CategoryID = p.ItemCategoryID
        WHERE c.CategoryBusinessID = :businessID
          AND m.ItemParentItemID > 0
          AND p.ItemParentItemID = 0
          AND (m.ItemIsModifierTemplate IS NULL OR m.ItemIsModifierTemplate = 0)
          AND m.ItemIsActive = 1
        ORDER BY m.ItemName
    ", { businessID: businessID }, { datasource: "payfrit" });

    arrayAppend(response.deleted, "Found " & qOrphans.recordCount & " orphan modifiers to delete");

    // First, delete all children of orphan items (level 3+)
    for (orphan in qOrphans) {
        try {
            // Delete children of this orphan (options within the modifier group)
            qDeleteChildren = queryExecute("
                DELETE FROM Items WHERE ItemParentItemID = :orphanID
            ", { orphanID: orphan.ItemID }, { datasource: "payfrit" });

            // Delete the orphan itself
            qDeleteOrphan = queryExecute("
                DELETE FROM Items WHERE ItemID = :orphanID
            ", { orphanID: orphan.ItemID }, { datasource: "payfrit" });

            arrayAppend(response.deleted, {
                "ItemID": orphan.ItemID,
                "ItemName": orphan.ItemName,
                "WasUnder": orphan.ParentName
            });
        } catch (any deleteErr) {
            arrayAppend(response.errors, {
                "ItemID": orphan.ItemID,
                "ItemName": orphan.ItemName,
                "Error": deleteErr.message
            });
        }
    }

    response["deletedCount"] = arrayLen(response.deleted) - 1; // Subtract the "Found X" message
    response["errorCount"] = arrayLen(response.errors);
    response["OK"] = true;

} catch (any e) {
    response["ERROR"] = e.message;
    response["DETAIL"] = e.detail;
}

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