<cfabort>
<!--- 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 = "">
<cfset ARGUMENTS.FromFaxNumber = "12074820034" />

<cfquery  name="getagency" datasource="#Application.DataSrc#">
    SELECT *, '' as CODING_WIZARD   FROM hhapowerpath.Agency WHERE status = 'active'
    
</cfquery>

<cfloop query="getagency">
    <cfif len(getagency.FAX_APINumber) gt 0 AND len(getagency.FAX_userid) gt 0>
            <cfset LOCAL.FromFaxNumber = #getagency.FAX_APINumber# />
            <cfset LOCAL.user_ID = #getagency.FAX_userid# />
            <cfset LOCAL.FAX_ClientID = #getagency.FAX_ClientID# />
            <cfset LOCAL.FAX_ClientSecret = #getagency.FAX_ClientSecret# />
            <cfset LOCAL.Agency_ID = #getagency.Agency_ID# />
    <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" />
            <cfset LOCAL.Agency_ID =  "179" />
    </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.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.ReceivedFaxEndpoint = "https://api.securedocex.com/faxes/received">
        <!--- Make web service call to the REST service to retrieve the Fax --->
        <cfset LOCAL.RestStartTime  = GetTickCount()>
        <CFSET TodaysDate = #DateFormat (Now(), "yyyy-mm-dd")#>
        <cfset todaydate =  #DateFormat(TodaysDate-2,"yyyy-mm-dd")#  & 'T00:00:00.000+0000' />
        <cfhttp 
            url         = "#LOCAL.ReceivedFaxEndpoint#"
            method      = "GET" 
            timeout     =  "1000"   
            result      = "httpReceiveFaxResponse">
            <cfhttpparam name="Authorization" type="HEADER" value="#request.oAuthAccessToken.ValidToken#">
            <cfhttpparam name="user-id" type="HEADER" value="#LOCAL.User_ID#">
            <cfhttpparam name="min_completed_timestamp" type="url" value="#todaydate#">
            
        </cfhttp>
        <cfset LOCAL.RestEndTime = GetTickCount()>
        <cfset LOCAL.returnFaxSendResult.FaxProcessTime = NumberFormat((LOCAL.RestEndTime - LOCAL.RestStartTime)/1000,'__.___')>
        <cfset receivedfaxlist = deserializeJSON(httpReceiveFaxResponse.Filecontent) />
        <cfset receivedfax_list = receivedfaxlist.faxes />
        <cfdump var="#receivedfax_list#">
        <cfif httpReceiveFaxResponse.responseHeader.Status_Code eq 200>  
            <cfloop from ="1" to ="#arraylen(receivedfax_list)#" index="i">
                 <cftry>
                        <cfset  request.fax_id                  =  #receivedfax_list[i].fax_id#>
                        <cfset  request.size                    =  #receivedfax_list[i].size#>
                        <cfset  request.image_downloaded        =  #receivedfax_list[i].image_downloaded#>
                        <cfset  request.fax_status              =  #receivedfax_list[i].fax_status#>
                        <cfset  request.completed_timestamp     =  #receivedfax_list[i].completed_timestamp# >
                        <cfset  request.originating_fax_number  =  #receivedfax_list[i].originating_fax_number# >
                        <cfset  request.originating_fax_tsid    =  #receivedfax_list[i].originating_fax_tsid# >
                        <cfquery  name="getReceivefax" datasource="#Application.DataSrc#">
                            SELECT * FROM #Request.prefix_db_lookup#.Received_faxes 
                            WHERE fax_id= <cfqueryparam value = "#request.fax_id#" CFSQLType ="cf_sql_varchar">
                        </cfquery>
                        <cfif getReceivefax.recordcount EQ 0 >
                            <cfquery  name="Received_faxes_insert" datasource="#Application.DataSrc#">
                                INSERT INTO #Request.prefix_db_lookup#.Received_faxes
                                (
                                    fax_id, size, image_downloaded, fax_status, completed_timestamp, originating_fax_number, originating_fax_tsid, 
                                    Agency_ID,
                                    record_timesatmp
                                ) 
                                VALUES
                                (         
                                    <cfqueryparam value = "#request.fax_id#" CFSQLType ="cf_sql_varchar">,
                                    <cfqueryparam value = "#request.size#" CFSQLType ="cf_sql_varchar">,
                                    <cfqueryparam value="#request.image_downloaded#"  cfsqltype="cf_sql_varchar">,
                                    <cfqueryparam value="#request.fax_status#"  cfsqltype="cf_sql_varchar">,
                                    <cfqueryparam value = "#request.completed_timestamp#" CFSQLType ="cf_sql_timestamp">,
                                    <cfqueryparam value="#request.originating_fax_number#" cfsqltype="cf_sql_varchar">,
                                    <cfqueryparam value = "#request.originating_fax_tsid#" CFSQLType ="cf_sql_varchar">,
                                    <cfqueryparam value="#LOCAL.Agency_ID#" cfsqltype="cf_sql_integer">, 
                                    <cfqueryparam value="#now()#" cfsqltype="cf_sql_timestamp">
                                )
                            </cfquery> 
                        </cfif> 
                    <cfcatch>
                        <!--- ERROR: add general CFCATCH error to error log statement --->
                        <cfset LOCAL.returnFaxSendResult.ErrorMessage =  "FAX Receive all query service: Error when we get response |CFCATCH MESSAGE: #CFCATCH.Message#|CFCATCH DETAIL: #CFCATCH.Detail#|CFC | Fax Number #request.originating_fax_number#">
                       <!--- <cfdump var ="#LOCAL.returnFaxSendResult.ErrorMessage#">
                        <cfdump var ="#CFCATCH#"> --->
                        <cflog file="faxerror" type="error"  text="#LOCAL.returnFaxSendResult.ErrorMessage#">
                    </cfcatch>
                </cftry>        
            </cfloop> 
        <cfelse>
             <cfset LOCAL.returnFaxSendResult.ErrorMessage =  "FAX Receive all query service: Error when we get response  status code">
             <!--- <cfdump var ="#LOCAL.returnFaxSendResult.ErrorMessage#">
             <cfdump var ="#httpReceiveFaxResponse#"> --->
             <cflog file="faxerror" type="error"  text="#LOCAL.returnFaxSendResult.ErrorMessage#">
        </cfif>    
    </cfif>
</cfloop>
