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

<cfscript>
// Returns quick task templates for a business
// Input: BusinessID (required)
// Output: { OK: true, TEMPLATES: [...] }

function apiAbort(required struct payload) {
    writeOutput(serializeJSON(payload));
    abort;
}

function readJsonBody() {
    var raw = getHttpRequestData().content;
    if (isNull(raw)) raw = "";
    if (!len(trim(raw))) return {};
    try {
        var data = deserializeJSON(raw);
        if (isStruct(data)) return data;
    } catch (any e) {}
    return {};
}

try {
    data = readJsonBody();

    // Get BusinessID from body, header, or URL
    businessID = 0;
    httpHeaders = getHttpRequestData().headers;

    if (structKeyExists(data, "BusinessID") && isNumeric(data.BusinessID)) {
        businessID = int(data.BusinessID);
    } else if (structKeyExists(httpHeaders, "X-Business-ID") && isNumeric(httpHeaders["X-Business-ID"])) {
        businessID = int(httpHeaders["X-Business-ID"]);
    } else if (structKeyExists(url, "BusinessID") && isNumeric(url.BusinessID)) {
        businessID = int(url.BusinessID);
    }

    if (businessID == 0) {
        apiAbort({ "OK": false, "ERROR": "missing_params", "MESSAGE": "BusinessID is required" });
    }

    // Get quick task templates for this business
    q = queryExecute("
        SELECT
            qt.ID,
            qt.Name as Name,
            qt.TaskCategoryID as CategoryID,
            qt.Title as Title,
            qt.Details as Details,
            qt.Icon as Icon,
            qt.Color as Color,
            qt.SortOrder as SortOrder,
            qt.IsActive as IsActive,
            tc.Name as Name,
            tc.Color as CategoryColor
        FROM QuickTaskTemplates qt
        LEFT JOIN TaskCategories tc ON qt.TaskCategoryID = tc.ID
        WHERE qt.BusinessID = :businessID
          AND qt.IsActive = 1
        ORDER BY qt.SortOrder, qt.ID
    ", {
        businessID: { value: businessID, cfsqltype: "cf_sql_integer" }
    }, { datasource: "payfrit" });

    templates = [];
    for (row in q) {
        arrayAppend(templates, {
            "QuickTaskTemplateID": row.ID,
            "Name": row.Name,
            "CategoryID": isNull(row.CategoryID) ? "" : row.CategoryID,
            "Title": row.Title,
            "Details": isNull(row.Details) ? "" : row.Details,
            "Icon": isNull(row.Icon) ? "add_box" : row.Icon,
            "Color": isNull(row.Color) ? "##6366f1" : row.Color,
            "SortOrder": row.SortOrder,
            "IsActive": row.IsActive,
            "Name": isNull(row.Name) ? "" : row.Name,
            "CategoryColor": isNull(row.CategoryColor) ? "" : row.CategoryColor
        });
    }

    apiAbort({
        "OK": true,
        "TEMPLATES": templates,
        "COUNT": arrayLen(templates)
    });

} catch (any e) {
    apiAbort({
        "OK": false,
        "ERROR": "server_error",
        "MESSAGE": e.message
    });
}
</cfscript>
