<cfsetting showdebugoutput="false">
<cfheader name="Content-Type" value="application/json; charset=utf-8">

<cfset responseStruct = { "success": false, "message": "", "data": {} }>
<cfset statusCode = 200>

<cftry>
    <cfif cgi.REQUEST_METHOD NEQ "POST">
        <cfset statusCode = 405>
        <cfset responseStruct.message = "Method not allowed. Use POST.">
        <cfthrow type="whisper.invalidMethod" message="Only POST requests are supported.">
    </cfif>

    <cfset agencyId = structKeyExists(session, "AgencyID") ? session.AgencyID : (structKeyExists(session, "AgencyId") ? session.AgencyId : "")>
    <cfif NOT len(trim(agencyId))>
        <cfset statusCode = 401>
        <cfset responseStruct.message = "Session expired. Please sign in again.">
        <cfthrow type="whisper.sessionMissing" message="AgencyID not found in session.">
    </cfif>

    <cfparam name="form.whisper_file_id" default="">
    <cfset whisperFileId = val(form.whisper_file_id)>
    <cfif whisperFileId LTE 0>
        <cfset statusCode = 400>
        <cfset responseStruct.message = "A valid whisper file ID is required.">
        <cfthrow type="whisper.invalidInput" message="Missing whisper_file_id.">
    </cfif>

    <cfset patientIdFromSession = (structKeyExists(session, "cs") AND structKeyExists(session.cs, "patientid")) ? val(session.cs.patientid) : 0>

    <cfquery name="getWhisperFile" datasource="#Application.DataSrc#">
        SELECT ID, Patient_Id
        FROM #Request.prefix_db_agency#.whisper_files
        WHERE ID = <cfqueryparam value="#whisperFileId#" cfsqltype="cf_sql_bigint">
          AND Agency_Id = <cfqueryparam value="#agencyId#" cfsqltype="cf_sql_varchar">
          AND Status = 0
        <cfif patientIdFromSession GT 0>
          AND Patient_Id = <cfqueryparam value="#patientIdFromSession#" cfsqltype="cf_sql_varchar">
        </cfif>
        LIMIT 1
    </cfquery>

    <cfif getWhisperFile.recordcount EQ 0>
        <cfset statusCode = 404>
        <cfset responseStruct.message = "Whisper file not found or unavailable.">
        <cfthrow type="whisper.fileNotFound" message="No whisper_files row for ID #whisperFileId#.">
    </cfif>

    <cfquery name="softDeleteWhisperFile" datasource="#Application.DataSrc#">
        UPDATE #Request.prefix_db_agency#.whisper_files
        SET Status = <cfqueryparam value="1" cfsqltype="cf_sql_tinyint">
        WHERE ID = <cfqueryparam value="#whisperFileId#" cfsqltype="cf_sql_bigint">
          AND Agency_Id = <cfqueryparam value="#agencyId#" cfsqltype="cf_sql_varchar">
          AND Status = 0
    </cfquery>

    <cfset responseStruct.success = true>
    <cfset responseStruct.message = "File removed.">
    <cfset responseStruct.data = { "whisper_file_id": whisperFileId }>

    <cfheader statuscode="#statusCode#" statustext="OK">
    <cfoutput>#serializeJSON(responseStruct)#</cfoutput>

<cfcatch type="any">
    <cfset responseStruct.success = false>
    <cfif NOT len(trim(responseStruct.message))>
        <cfset responseStruct.message = "Unable to delete whisper file.">
    </cfif>
    <cfif statusCode EQ 200>
        <cfset statusCode = 500>
    </cfif>
    <cfheader statuscode="#statusCode#" statustext="Error">
    <cfoutput>#serializeJSON(responseStruct)#</cfoutput>
</cfcatch>
</cftry>
