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

<cfscript>
try {
    requestBody = toString(getHttpRequestData().content);
    requestData = {};
    if (len(requestBody)) {
        requestData = deserializeJSON(requestBody);
    }

    tableName = requestData.table ?: "";
    if (len(tableName) == 0) {
        writeOutput(serializeJSON({ "OK": false, "ERROR": "table parameter required" }));
        abort;
    }

    // Get table structure
    cols = queryTimed("DESCRIBE #tableName#", {}, { datasource: "payfrit" });

    columns = [];
    for (c in cols) {
        arrayAppend(columns, {
            "Field": c.Field,
            "Type": c.Type,
            "Null": c.Null,
            "Key": c.Key,
            "Default": isNull(c.Default) ? "NULL" : c.Default
        });
    }

    // Get sample data
    sampleData = queryTimed("SELECT * FROM #tableName# LIMIT 5", {}, { datasource: "payfrit" });

    samples = [];
    for (row in sampleData) {
        arrayAppend(samples, row);
    }

    writeOutput(serializeJSON({
        "OK": true,
        "TABLE": tableName,
        "COLUMNS": columns,
        "SAMPLE_DATA": sampleData,
        "ROW_COUNT": sampleData.recordCount
    }));
} catch (any e) {
    writeOutput(serializeJSON({
        "OK": false,
        "ERROR": e.message
    }));
}
</cfscript>
