<cfparam name="form.faxmemo" default="">
<!--- send_fax.cfm --->

<cfquery name="Get485phy" datasource="#Application.DataSrc#">
	SELECT * FROM  #Request.prefix_db_lookup#.pPhysicians
	WHERE Emp_ID = '#FORM.Emp_ID#' AND status =0 
</cfquery>


<cfif form.faxmemo EQ '' >
	<cfset fax_covermessage =  'Progres Notes files' />
<cfelse>
	<cfset fax_covermessage =  #form.faxmemo# />
</cfif>

<cfif Get485phy.Phys_Fax NEQ '' OR FORM.Emp_ID EQ 'other' >

	<cfif FORM.files_type EQ  'pat_files'>
		<cfquery  name='getFile' datasource='#Application.DataSrc#'>
			  SELECT  files.*,pPatients.Pt_Last,pPatients.Pt_First 
			  FROM  #Request.prefix_db_agency#.files
			  JOIN  #Request.prefix_db_agency#.pPatients ON pPatients.Patient_ID = files.PatientId AND pPatients.status < 2
			  WHERE files.id IN (#FORM.file_id#)
			  AND   files.AgencyId = '#session.AgencyId#'
		</cfquery>
		<!--- <cfif getFile.recordcount GT 0 >
			<cfheader name="Content-Disposition" value="attachment; filename=#Rereplace(getFile.FileName,',','','all')#" />
			<cfcontent type="#getFile.FileType#" file="/s3://AKIAITBU5FFRO2BTJNEA:j1bcSlFTBHEmLdSvuqz8L4ll1ZEWdKCBvgkBXFgp@s3.amazonaws.com/homecare/#getFile.Dup_file_name#" />
			</cfif> ---> 
		<cfset request.myPdf = "" />
		<cfset Request.docFields = "" />
		<cfset path = 'Patient_files/agency_'&#session.AgencyId# />
		<cfset mypdfarray = ArrayNew(1) />
		<cfloop query="getFile">
			<cfset getfilename = "s3://#Request.bucket_accesskey#:#Request.bucket_secretkey#@#Request.bucket_name#/#path#/#getFile.Dup_file_name#" />
			<cfset request.myPdfs = fileReadBinary(getfilename) />
	      	<cfset request.myPdfsbase = toBase64(request.myPdfs) />
	      	<cfset request.myPdf =   request.myPdf  &""&  request.myPdfsbase  />	      	
	      	<cfset Request.docFields =  
			      	{ "document_content": "#request.myPdfsbase#",
			         "document_type": "PDF"
			        } />
			<cfset ArrayAppend(mypdfarray, Request.docFields)>      	
		</cfloop>
		<!--- <cfif CGI.REMOTE_ADDR EQ '103.143.7.161'>
			 <cfdump var="#Request.docFields#"> 
			 <cfdump var="#mypdfarray#">
		</cfif> --->
		<cfset LOCAL.subject = "Sending uploaded files for patient #getFile.Pt_First#, #getFile.Pt_Last#" />
		<cfset LOCAL.Heading = "Patient files" />
		<cfset LOCAL.FileType = "#getFile.FileType#" />

	<cfelse>
		<cfquery  name='getFile' datasource='#Application.DataSrc#'>
			  SELECT  pg_files.*,pPatients.Pt_Last,pPatients.Pt_First 
			  FROM  #Request.prefix_db_agency#.pg_files
			  JOIN  #Request.prefix_db_agency#.pPatients ON pPatients.Patient_ID = pg_files.Patient_Id AND pPatients.status < 2
			  WHERE pg_files.id = '#FORM.file_id#'
			  AND   pg_files.Agency_Id = '#session.AgencyId#'
		</cfquery>
		<cfset path = 'Progress_files/agency_'&#session.AgencyId# />
		<cfset getfilename = "s3://#Request.bucket_accesskey#:#Request.bucket_secretkey#@#Request.bucket_name#/#path#/#getFile.Dup_file_name#" />
		<cfset LOCAL.subject = "Sending uploaded files for patient #getFile.Pt_First#, #getFile.Pt_Last#" />
		<cfset LOCAL.Heading = "Progres Notes files" />
		<cfset LOCAL.FileType = "#getFile.FileType#" />
	</cfif>

	<!--- Set the function & Fax Service Response Parameters --->
	<cfset LOCAL.TheReturnedData                    = "">
	<cfset LOCAL.TheValidToken                      = "">
	<cfset LOCAL.returnFaxSendResult                = StructNew()>
	<cfset LOCAL.returnFaxSendResult.ErrorMessage   = "">
	<cfset LOCAL.returnFaxSendResult.ValidFax       = "">
	<cfset LOCAL.returnFaxSendResult.FaxProcessTime = "">
	<cfif FORM.Emp_ID EQ 'other'>
		<cfset LOCAL.ToFaxNumber =   #FORM.otherfaxnumber# />
		<cfset LOCAL.ToName =  #FORM.otherfaxnumber# /> 
	<cfelse>
		<cfset LOCAL.ToFaxNumber = #Get485phy.Phys_Fax# />
		<cfset LOCAL.ToName = #Get485phy.Phys_First# /> 
	</cfif>
	
	<cfif len(getTimeZone.FAX_APINumber) gt 0 AND len(getTimeZone.FAX_userid) gt 0>
		<cfset LOCAL.FromFaxNumber = #getTimeZone.FAX_APINumber# />
		<cfset LOCAL.user_ID = #getTimeZone.FAX_userid# />
		<cfset LOCAL.FAX_ClientID = #getTimeZone.FAX_ClientID# />
		<cfset LOCAL.FAX_ClientSecret = #getTimeZone.FAX_ClientSecret# />
	<cfelse>
		<cfset LOCAL.FromFaxNumber = "12074820034" />
		<cfset LOCAL.user_ID = "920bd222-3c5e-4976-b768-e42e69c18281" />
		<cfset LOCAL.FAX_ClientID = "e53f4e48-4995-43b3-b3e0-d4ef2d9247ae" />
		<cfset LOCAL.FAX_ClientSecret =  "rPCENt3yMs3zNV/B" />
	</cfif>

	<cfset request.oAuthAccessToken = CreateObject("component","components.general.oAuth").GetAccessToken(
	                OauthServerCallTimeOuts = '100',
	                TheClientID             =  #LOCAL.FAX_ClientID#,
	                TheClientSecret         =  #LOCAL.FAX_ClientSecret#,
	                OauthTokenEndpoint      = 'https://api.securedocex.com/tokens',
	                OauthGrantType          =  'client_credentials') >
	 
	<!--- ERROR: capture any oAuth service errors --->
	<cfif LEN(trim(request.oAuthAccessToken.ErrorMessage)) NEQ 0>
	    <cfset LOCAL.returnFaxSendResult.ErrorMessage = request.oAuthAccessToken.ErrorMessage>
	</cfif>
	<!--- ====================== END: CAPTURING OAUTH SERVICE CALL ===================== ---> 
	        
	<!--- ====================== BEGIN: Fax SERVICE CALL ===================== ---> 
	<!--- if valid access token exists, make Fax service call --->
	<cfif LEN(trim(request.oAuthAccessToken.ValidToken)) NEQ 0>
	    <cfset LOCAL.AuthorizationEndpoint = "https://api.securedocex.com/faxes">
	    <cfif FORM.files_type NEQ  'pat_files'>
	 		<cfscript>
		       	   request.myPdf = fileReadBinary(getfilename);
		      	   request.myPdf = toBase64( request.myPdf );
		           //request.myPdf = toBinary( request.myPdf );
		    </cfscript>
		    <cfset mypdfarray = ArrayNew(1) />
		    <cfset Request.docFields =  
			      	{ "document_content": "#request.myPdf#",
			         "document_type": "PDF"
			        } />
			<cfset ArrayAppend(mypdfarray, Request.docFields)>  
		</cfif>
	   <cfset  LOCAL.stField = 
	       {        
	            "destinations": [
	                {
	                    "fax_number" : "#LOCAL.ToFaxNumber#",
	                    "to_name" : "#LOCAL.ToName#",
	                    "to_company": "#session.agencyname#"
	                }
	            ],
	            "documents": #mypdfarray#,	            
	           "fax_options" : 
	           	{
                    "image_resolution" : "FINE",
                    "include_cover_page" : "true",
                    "custom_CallerID" : "18189785900",
                    "header_options": {
                    "line_1":["${CSID}", "${DATE_TIME2}", "${FAX_ID}", "Page: ${CURRENT_PAGE} / ${TOTAL_PAGE}"]
                	},
            	"custom_CSID" : "MyHomeCareBiz",
	                "cover_page_options" : 
	                {
	                    "from_name" : "#session.display#",
	                    "subject" : "#LOCAL.subject#",
	                    "message" : "#fax_covermessage#",
	                    "retry_options":{
	                         "non_billable":4,
	                         "billable":10,
	                         "human_answer":1
	                    }
	                }
	            }
	        }
	    > 
	    <!--- Make web service call to the REST service to retrieve the Fax --->
	    <cfset LOCAL.RestStartTime  = GetTickCount()>
	    <cfhttp 
	        url         = "#LOCAL.AuthorizationEndpoint#"
	        method      = "POST" 
	        timeout     =  "1000"
	        result      = "httpFaxResponse">
	        <cfhttpparam name="Content-Type"  type="HEADER" value="#LOCAL.FileType#">
	        <cfhttpparam name="Authorization" type="HEADER" value="#request.oAuthAccessToken.ValidToken#">
	        <cfhttpparam name="user-id" type="HEADER" value="#LOCAL.user_ID#">
	        <cfhttpparam type="body" value="#serializeJSON(LOCAL.stField)#">
	        <!--- <cfhttpparam type="formfield" name="documents" value="#serializeJSON(documents)#">
	        <cfhttpparam type="formfield" name="destinations" value="#serializeJSON(destinations)#"> --->
	    </cfhttp>
	    <cfset LOCAL.RestEndTime = GetTickCount()>
	    <cfset LOCAL.returnFaxSendResult.FaxProcessTime = NumberFormat((LOCAL.RestEndTime - LOCAL.RestStartTime)/1000,'__.___')>
	     
	   <!--- <cfif CGI.REMOTE_ADDR EQ '103.143.7.161'>
	    	  <cfdump var="#serializeJSON(LOCAL.stField)#">
			 <cfdump var="#LOCAL#"> 
			 <cfdump var="#Request#">
			 <cfdump var="#httpFaxResponse#">
	     		<cfabort> 
		</cfif> --->

	    <cfif httpFaxResponse.responseHeader.Status_Code eq 201>             
	        <cftry>
	            <!--- set the FAX into the return struct --->
	            <cfset LOCAL.Faxresponse ="#deserializeJSON(httpFaxResponse.Filecontent)#" />
	            <cfset LOCAL.returnFaxSendResult.fax_id = LOCAL.Faxresponse[1].fax_id>
	            <cfset LOCAL.returnFaxSendResult.destination_fax_number = LOCAL.Faxresponse[1].destination_fax_number>
	            <cfset LOCAL.returnFaxSendResult.ValidFax       = "Yes">
	            <cfoutput>
	            		<!---  Fax sent sucessfully  --->
	            		<cfset faxsend_to   =  LOCAL.ToFaxNumber />
	            		<cfquery  name='updatefiles' datasource='#Application.DataSrc#'>
							  UPDATE  
							 	<cfif FORM.files_type EQ  'pat_files'>	#Request.prefix_db_agency#.files
							  	<cfelse>	#Request.prefix_db_agency#.pg_files
							  	</cfif>
							    SET faxsend_to = <cfqueryparam cfsqltype="cf_sql_varchar" value="#faxsend_to#">,
							    faxsent_time = <cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#">
							  WHERE id IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#FORM.file_id#" list="yes">)
						</cfquery>
	                   	<cflocation url="index.cfm?page=patient&cat=uploadlist&message=Successfully send Fax to #LOCAL.ToName#" addtoken="no">
	            </cfoutput>
	            <cfcatch>
	                 <cfset LOCAL.returnFaxSendResult.ValidFax       = "No">
	                <!--- ERROR: add general CFCATCH error to error log statement --->
	                <cfset LOCAL.returnFaxSendResult.ErrorMessage = LOCAL.returnFaxSendResult.ErrorMessage & "FAX SEND SERVICE: Error when we get response |CFCATCH MESSAGE: #CFCATCH.Message#|CFCATCH DETAIL: #CFCATCH.Detail#|CFC | Fax Number #LOCAL.ToFaxNumber# | Return code: #httpFaxResponse.responseHeader.Status_Code#">
	                <cflog file="faxapi" type="Error"  text="FAX API failure error,#LOCAL.returnFaxSendResult.ErrorMessage# Error: #cfcatch.Message# #cfcatch.Detail#">
	                <cflocation url="index.cfm?page=patient&cat=uploadlist&message=failure due to FAX send API error" addtoken="no">

	            </cfcatch>
	        </cftry>                
	    <cfelse>
            <!--- ERROR: add failed FAX service call to error log statement --->
            <cfset LOCAL.returnFaxSendResult.ValidFax       = "No">
             <cfdump var="#request.oAuthAccessToken#"> 
            <cfset LOCAL.returnFaxSendResult.ErrorMessage = LOCAL.returnFaxSendResult.ErrorMessage & "FAX SEND SERVICE: Error when we send fax to the customer| Fax Number: #LOCAL.ToFaxNumber#  | Return code: #httpFaxResponse.responseHeader.Status_Code#">
            <!--- <cflog file="faxapi" type="Error"  text="FAX API failure error,#LOCAL.returnFaxSendResult.ErrorMessage# Error: #cfcatch.Message# #cfcatch.Detail#"> --->
             <cfdump var="#LOCAL.returnFaxSendResult.ErrorMessage#"> <cfdump var="#LOCAL.stField#"> <cfdump var="#httpFaxResponse#"><cfabort>
            <cflocation url="index.cfm?page=patient&cat=uploadlist&message=failure due to FAX send API error" addtoken="no">
	    </cfif>	 
	</cfif>
<cfelse>
		<cflocation url="index.cfm?page=patient&cat=uploadlist&message=Failure due to physician Fax number is unavailable" addtoken="no">
</cfif>