
    "giQ                     `   d dl mZmZmZmZmZmZ d dlmZ d dl	Z	d dl
mZ d dlmZ d dlmZmZmZmZmZ d dlmZ d dlmc mc mZ d dlmZ d d	l
mZ  e       Zej?                  d
e       edd       edd       edd      d ee      fde de de!dedef
d       Z"ej?                  d       edd      d ee      fde!dedefd       Z#ej?                  d       edd      d ee      fdee!   dedefd       Z$ej?                  d       edd      dfdee!   defd       Z%y)     )	APIRouterHTTPExceptionDependsRequestQueryBody)SessionN)Dict)get_db)AddressDataBankStatementDataVehicleDocumentDataBusinessDocumentData MultiDocumentVerificationRequest)AddressMatchResponse)logger)Listz/verify-address)response_model.z9Type of document e.g. residence_documents, bank_statement)descriptionz4Public URL (or comma list) of the document image/PDFzVJSON body: AddressData for residence_documents OR BankStatementData for bank_statement	file_typefile_urlraw_bodyrequestdbc                 D  K   	 | dk(  r	 t        di |}n0| dk(  r	 t        di |}n| dk(  r	 t	        di |}n	 t        di |}t        j                  || |||       d{   S # t        $ r}t        dd|       d}~ww xY w# t        $ r}t        dd|       d}~ww xY w# t        $ r}t        dd	|       d}~ww xY w# t        $ r}t        dd
|       d}~ww xY w7 # t        $ r  t        $ r}t        ddt        |             d}~ww xY ww)a  Verify structured data against a remote document.

    file_type=bank_statement expects body:
    {
        "first_name": "MP",
        "middle_name": "",
        "last_name": "Convergent",
        "bank_name": "Bank of America",
        "account_type": "Saving",
        "balance": "10000.00"
    }

    file_type=residence_documents expects AddressData body with address fields.
    bank_statement  zInvalid bank_statement body: status_codedetailNvehicle_documentzInvalid vehicle_document body: business_documentsz!Invalid business_documents body: zInvalid address body: i  zInternal server error:  )	r   	Exceptionr   r   r   r   prompt_controllerverify_address_with_documentstr)r   r   r   r   r   parsedes          I/var/www/html/BankruptcyAI-uat/bankruptcy-ai/src/modules/prompt/routes.pyr&   r&      s}    ,X((a*6X6 ,,c,8x8 ..e-99Z$0x0 'CCB	S[]celmmm%  a#>[\][^<_``a
  c#>]^_]`<abbc
  e#>_`a_b<cdde
  Z#>TUVTW<XYYZ n  X6McRSfX4VWWXs   D C- A' C- B C- B) C- C
 C- "C+#C- &D '	B0B  BC- 	B&B!!B&&C- )	C2CCC- 
	C(C##C((C- -D?DDD z/verify-documentsz(Unified multi-document verification bodybodyc                   K   	 t        j                  |       }t        j                  d|        t        j                  |||       d{   S # t        $ r-}t        j
                  d|        t        dd|       d}~ww xY w7 =w)a  New unified endpoint supporting multi-file verification in JSON body.

    Accepts body matching MultiDocumentVerificationRequest. Example bank statement:
    {
        "file_type": "bank_statement",
        "file_urls": ["https://example.com/a.pdf", "https://example.com/b.pdf"],
        "data": {
            "first_name": "MP",
            "middle_name": "",
            "last_name": "Convergent",
            "bank_name": "Bank of America",
            "account_type": "Saving",
            "balance": "10000.00"
        }
    }
    Residence document:
    {
        "file_type": "residence_documents",
        "file_urls": ["https://example.com/lease_pg1.jpg"],
        "data": { ... AddressData ... }
    }
    z&Request started for following payload zRequest started but got error r   Invalid request body: r   N)	r   from_rawr   infor$   errorr   r%   verify_multi_documents)r+   r   r   parsed_requestr)   s        r*   verify_documentsr3   C   s     8R9BB4H<^<LMN
 #99"ngVVV	  R5aS9:6LQC4PQQR Ws3   B-A BB	B	B(BBBz/verify-documents-celeryc                 8   ddl m} ddlm} ddlm} ddlm} ddlm} g }| D ]+  }		 t        j                  |	      }
t        j                  dt        |
j                         d        ||	j                  d	            }|j                   j#                  d
      j%                  d
      d   }|} |||	|	j                  d	      |j'                               }|j)                  |       |j+                          |j-                  |       |j/                  |j0                        }|j3                  ||j0                  |j0                  dd       . t        |       d|dS # t4        $ r-}t        j6                  d|        t9        dd|       d}~ww xY w)z2Route to submit verification tasks to Celery queuer   )process_verification_task)BnkAIReqResuuid4)datetime)urlparsezRequest validated for  file(s)callback_url/)
request_idr   r<   
created_at	submitted)r?   job_idtask_idstatuszFailed to submit task: r   r-   r   Nz task(s) submitted successfullymessagetasks)src.utils.celery_tasksr5   src.modules.modelsr6   uuidr8   r9   urllib.parser:   r   r.   r   r/   len	file_urlsgetpathrstripsplitutcnowaddcommitrefreshdelayidappendr$   r0   r   )r+   r   r   r5   r6   r8   r9   r:   submitted_tasksitemr2   r(   
last_paramr?   
celery_jobtaskr)   s                    r*   verify_documents_celeryr^   l   s    A.!%O V	V=FFtLNKK0^5M5M1N0OxXYdhh~67F++C066s;B?J#J$%!XXn5#??,	J FF:IIKJJz" -22:==AD""($--77%	$ -VD /*++JK  	  	VLL21#67C:PQRPS8TUU	Vs   D'E##	F,(FFz"/verify-documents-celery-withoutdbz0Unified multi-document verification body (NO DB)c                    ddl m} ddlm} g }| D ]  }	 t	        j
                  |      }t        j                  dt        |j                         d       t         |             }|j                  ||      }|j                  ||j                  dd        t        |       d|dS # t        $ r-}	t        j                  d|	        t!        d	d
|	       d}	~	ww xY w)zKRoute to submit verification tasks to Celery queue WITHOUT database storager   )#process_verification_task_withoutdbr7   z[NO-DB] Request validated for r;   rA   )r?   rC   rD   z[NO-DB] Failed to submit task: r   r-   r   Nz' task(s) submitted successfully (NO DB)rE   )rH   r`   rJ   r8   r   r.   r   r/   rL   rM   r'   rV   rX   rW   r$   r0   r   )
r+   r   r`   r8   rY   rZ   r2   r?   r]   r)   s
             r*   !verify_documents_celery_withoutdbra      s     KO V	V=FFtLNKK8^=U=U9V8WW_`a UWJ 7<<ZND""(77%$ V. /*++RS  	  	VLL:1#>?C:PQRPS8TUU	Vs   BB**	C 3(CC )&fastapir   r   r   r   r   r   sqlalchemy.ormr	   jsontypingr
   src.database.sessionr   #src.modules.prompt.schemas.requestsr   r   r   r   r   $src.modules.prompt.schemas.responsesr   src.modules.prompt.controllermodulesprompt
controllerr%   src.core.loggingr   r   routerpostr'   dictr&   r3   r^   ra   r#       r*   <module>rr      s   K K "   ' \  \ E 9 9 #  
/CD3,gh#+ab#  ,D  E&//X/X/X /X 	/X
 	/X E/Xd  !c'QR&/"W
"W"W 	"W ""WP '(C-WX&/2
t*22 	2 )2t 12C-_`#
t*## 3#rq   