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

<cfscript>
// Add SourceType and SourceID columns to Tasks table
// These are needed for chat persistence feature

result = { "OK": true, "STEPS": [] };

try {
    // Check if columns already exist
    cols = queryTimed("
        SELECT COLUMN_NAME
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = 'payfrit'
        AND TABLE_NAME = 'Tasks'
        AND COLUMN_NAME IN ('SourceType', 'SourceID')
    ", [], { datasource: "payfrit" });

    existingCols = valueList(cols.COLUMN_NAME);
    arrayAppend(result.STEPS, "Existing columns: #existingCols#");

    // Add SourceType if missing
    if (!listFindNoCase(existingCols, "SourceType")) {
        queryTimed("
            ALTER TABLE Tasks ADD COLUMN SourceType VARCHAR(50) NULL
        ", [], { datasource: "payfrit" });
        arrayAppend(result.STEPS, "Added SourceType column");
    } else {
        arrayAppend(result.STEPS, "SourceType already exists");
    }

    // Add SourceID if missing
    if (!listFindNoCase(existingCols, "SourceID")) {
        queryTimed("
            ALTER TABLE Tasks ADD COLUMN SourceID INT NULL
        ", [], { datasource: "payfrit" });
        arrayAppend(result.STEPS, "Added SourceID column");
    } else {
        arrayAppend(result.STEPS, "SourceID already exists");
    }

    // Verify columns now exist
    verifyQuery = queryTimed("
        SELECT COLUMN_NAME, DATA_TYPE
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE TABLE_SCHEMA = 'payfrit'
        AND TABLE_NAME = 'Tasks'
        AND COLUMN_NAME IN ('SourceType', 'SourceID')
    ", [], { datasource: "payfrit" });

    result.COLUMNS = [];
    for (row in verifyQuery) {
        arrayAppend(result.COLUMNS, { "name": row.COLUMN_NAME, "type": row.DATA_TYPE });
    }

    arrayAppend(result.STEPS, "Migration complete");

} catch (any e) {
    result.OK = false;
    result.ERROR = e.message;
}

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