<cfinclude template="__Security-Block.cfm">

<!--- Set the function & Fax Service Response Parameters --->
<cfset LOCAL.TheReturnedData                    = "">
<cfset LOCAL.TheValidToken                      = "">
<cfset LOCAL.returnFaxReceiveResult                = StructNew()>
<cfset LOCAL.returnFaxReceiveResult.ErrorMessage   = "">
<cfset LOCAL.returnFaxReceiveResult.ValidFax       = "">
<cfset LOCAL.returnFaxReceiveResult.FaxProcessTime = "">
<cfset LOCAL.User_ID = "0dfaea2a-f711-4057-9a5b-e891046aad7a" />



<cfquery  name="GetList"  datasource="#Application.DataSrc#">
    SELECT * FROm #Request.prefix_db_lookup#.Received_faxes
    WHERE  Received_faxes.status = 0
    AND file_name IS  NULL
         AND ID >= 3310
    ORDER BY Received_faxes.completed_timestamp  DESC 
</cfquery>

<cfloop query="GetList">

<cfquery  name="getTimeZone"  datasource="#Application.DataSrc#">
    SELECT * FROm #Request.prefix_db_lookup#.Agency
    WHERE  Agency_ID = #GetList.Agency_ID#
</cfquery>


<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 = '5',
                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.returnFaxReceiveResult.ErrorMessage = request.oAuthAccessToken.ErrorMessage>
</cfif>
<!--- ====================== END: CAPTURING OAUTH SERVICE CALL ===================== ---> 





<cfif  GetList.fax_id EQ 0>
    <cfset LOCAL.returnFaxReceiveResult.ErrorMessage = "Fax Id is not passing">
</cfif>


        
<!--- ====================== BEGIN: Fax SERVICE CALL ===================== ---> 
<!--- if valid access token exists, make Fax service call --->
<cfif LEN(trim(request.oAuthAccessToken.ValidToken)) NEQ 0 AND GetList.fax_id NEQ 0>

    <cfset LOCAL.ReceivedFaxEndpoint = "https://api.securedocex.com/faxes/" & #GetList.fax_id# &"/image">
    <!--- Make web service call to the REST service to retrieve the Fax --->
    <cfset LOCAL.RestStartTime  = GetTickCount()>
    <cfhttp 
        url         = #LOCAL.ReceivedFaxEndpoint#
        method      = "GET" 
        timeout     =  "10"   
        result      = "httpReceiveFaxResponse">
        <cfhttpparam name="Authorization" type="HEADER" value="#request.oAuthAccessToken.ValidToken#">
        <cfhttpparam name="user-id" type="HEADER" value="#LOCAL.User_ID#">
    </cfhttp>
    <cfset LOCAL.RestEndTime = GetTickCount()>
    <cfset LOCAL.returnFaxReceiveResult.FaxProcessTime = NumberFormat((LOCAL.RestEndTime - LOCAL.RestStartTime)/1000,'__.___')>

    <cfif httpReceiveFaxResponse.responseHeader.Status_Code eq 200>  
        <cftry>
            <cfset receivedfaxlist = deserializeJSON(httpReceiveFaxResponse.Filecontent) />
            <cfset request.fax_id = receivedfaxlist.fax_id />
            <cfset request.file_name = receivedfaxlist.file_name />
            <cfset path = 'Received_faxes'/>
            <cfset binaryData = BinaryDecode(receivedfaxlist.image, "Base64") />
            <cfset original_filename = "fax_" & dateFormat(now(), "yyyymmdd") & "_" & timeFormat(now(), "HHmmssL") & ".pdf">
            <cfset filename =  '/var/www/received_faxes/'& original_filename />
          
            <cffile action="write"  file="s3://#Request.bucket_accesskey#:#Request.bucket_secretkey#@#Request.bucket_name#/#path#/#original_filename#" output="#binaryData#">
            <!--- <cffile action="write"  file="#filename#" output="#binaryData#"  mode="777">--->
            <cfquery name="Comm" datasource="#Application.DataSrc#">
                    UPDATE #Request.prefix_db_lookup#.Received_faxes 
                    SET  file_name = '#original_filename#'  
                    WHERE ID = <cfqueryparam VALUE="#GetList.ID#"  cfsqltype="cf_sql_integer" >
            </cfquery>
            <cfcatch>
                <!--- ERROR: add general CFCATCH error to error log statement --->
                <!--- <cfset LOCAL.returnFaxReceiveResult.ErrorMessage =  "FAX Receive image: Error when we get iamge/PDF format |CFCATCH MESSAGE: #CFCATCH.Message#|CFCATCH DETAIL: #CFCATCH.Detail#|CFC">
                <cfdump var ="#LOCAL.returnFaxReceiveResult.ErrorMessage#"> --->
                  Fax_ID - <cfdump var ="#GetList.ID#">
                <cfdump var ="#CFCATCH#">
              <cfabort>
            </cfcatch>
        </cftry>        
     <cfelse>
         <!--- <cfset LOCAL.returnFaxReceiveResult.ErrorMessage =  "FAX Receive all query service: Error when we get response  status code">
         <cfdump var ="#LOCAL.returnFaxReceiveResult.ErrorMessage#"> --->
          Fax_ID - <cfdump var ="#GetList.ID#">
         <cfdump var ="#httpReceiveFaxResponse#">
    </cfif>   
</cfif>
</cfloop>