<cfsetting showdebugoutput="false">

<cfparam name="FORM.schedule_id" default="0">
<cfparam name="FORM.action" default="status">

<cfset response = { "success" = false, "message" = "", "evv_status" = "", "schedule_id" = 0, "remove_from_report" = false, "hha_reason_code" = "", "hha_action_code" = "", "change_memo" = "" }>

<cftry>
	<cfset scheduleId = val(FORM.schedule_id)>
	<cfset agencyId = val(session.agencyid)>
	<cfset response.schedule_id = scheduleId>

	<cfif NOT isDefined("Request.prefix_db_agency") OR NOT len(trim(Request.prefix_db_agency))>
		<cfset Request.prefix_db_agency = "agency_" & agencyId>
	</cfif>
	<cfif NOT isDefined("Request.prefix_db_lookup") OR NOT len(trim(Request.prefix_db_lookup))>
		<cfset Request.prefix_db_lookup = "hhapowerpath">
	</cfif>

	<!--- #10626: return HHA edit codes saved on EVV Update Log for this schedule --->
	<cfif FORM.action EQ "get_hha_edit_codes">
		<cfif scheduleId LTE 0>
			<cfset response.message = "Invalid schedule.">
		<cfelse>
			<cftry>
				<cfquery name="qHhaCodes" datasource="#Application.DataSrc#">
					SELECT Change_Memo, HHA_Reason_Code, HHA_Action_Code
					FROM #Request.prefix_db_lookup#.EVV_Update_Log
					WHERE Schedule_ID = <cfqueryparam value="#scheduleId#" cfsqltype="cf_sql_integer">
					AND Agency_ID = <cfqueryparam value="#agencyId#" cfsqltype="cf_sql_integer">
					AND Status = 0
					ORDER BY Update_Log_ID DESC
					LIMIT 1
				</cfquery>
				<cfset response.success = true>
				<cfif qHhaCodes.recordCount GT 0>
					<cfset response.change_memo = trim(qHhaCodes.Change_Memo & "")>
					<cfset response.hha_reason_code = trim(qHhaCodes.HHA_Reason_Code & "")>
					<cfset response.hha_action_code = trim(qHhaCodes.HHA_Action_Code & "")>
				</cfif>
				<cfset response.message = "OK">
				<cfcatch type="any">
					<cfset response.success = true>
					<cfset response.message = "No HHA edit columns or log row">
				</cfcatch>
			</cftry>
		</cfif>
		<cfcontent type="application/json" reset="true"><cfoutput>#serializeJSON(response)#</cfoutput><cfabort>
	</cfif>

	<cfset evvStatusMgr = createObject("component", "components.evv.EVVStatusManager").init()>
	<cfif scheduleId LTE 0>
		<cfset response.message = "Invalid schedule.">
	<cfelse>
		<cfset evvVisitAuto = createObject("component", "components.evv.EVVVisitAutomation").init()>
		<cfset evvVisitStatus = evvStatusMgr.getEVVStatusWithChangeDetection("visits", scheduleId, agencyId)>
		<cfset evvVisitActiveJob = evvVisitAuto.getActiveJobForSchedule(scheduleId, agencyId)>
		<cfset displayStatus = evvStatusMgr.resolveVisitEVVStatusDisplay(evvVisitStatus.EVV_Status, evvVisitActiveJob)>

		<cfif NOT len(trim(displayStatus))>
			<cfset displayStatus = "Not Transmitted">
		</cfif>

		<cfquery name="qEvvSan" datasource="#Application.DataSrc#">
			SELECT San_status
			FROM #Request.prefix_db_lookup#.EVV
			WHERE LOWER(TRIM(IFNULL(API_Type, ''))) = <cfqueryparam value="visits" cfsqltype="cf_sql_varchar">
			AND Agency_ID = <cfqueryparam value="#agencyId#" cfsqltype="cf_sql_integer">
			AND Schedule_ID = <cfqueryparam value="#scheduleId#" cfsqltype="cf_sql_integer">
			AND status = <cfqueryparam value="0" cfsqltype="cf_sql_integer">
			ORDER BY EVV_ID DESC
			LIMIT 1
		</cfquery>
		<cfif qEvvSan.recordCount GT 0 AND len(trim(qEvvSan.San_status))>
			<cfset displayStatus = evvStatusMgr.resolveVisitEVVStatusDisplay(trim(qEvvSan.San_status), evvVisitActiveJob)>
			<cfif NOT len(trim(displayStatus))>
				<cfset displayStatus = trim(qEvvSan.San_status)>
			</cfif>
		</cfif>

		<cfif evvVisitActiveJob.hasActiveJob AND displayStatus EQ "Not Transmitted">
			<cfset displayStatus = "Transmitted - awaiting status check">
		</cfif>

		<cfset response.success = true>
		<cfset response.evv_status = displayStatus>
		<cfset response.remove_from_report = evvStatusMgr.visitEVVAcceptedForManualReport(displayStatus)>
		<cfif NOT response.remove_from_report AND qEvvSan.recordCount GT 0>
			<cfset response.remove_from_report = evvStatusMgr.visitEVVAcceptedForManualReport(qEvvSan.San_status)>
		</cfif>
		<cfset response.message = "Status updated for schedule #scheduleId#.">
	</cfif>

	<cfcatch type="any">
		<cfset response.message = "Error: #cfcatch.message#">
		<cflog file="evv_manual_transmission" text="Status refresh failed schedule #val(FORM.schedule_id)# agency #val(session.agencyid)#: #cfcatch.message# #cfcatch.detail#">
	</cfcatch>
</cftry>

<cfcontent type="application/json" reset="true"><cfoutput>#serializeJSON(response)#</cfoutput><cfabort>
