o
    j1                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlmZ edd i ZdZde	fddZ
de	d	e	fd
dZde	fddZd	e	de	fddZde	de	fddZde	fddZde	de	defddZ	d+de	de	de	de	de	dede	de	de	fddZ	d,de	de	de	de	de	d ede	fd!d"Z	d+de	de	de	de	de	d ede	de	fd#d$Z	d+de	de	de	de	de	d ede	de	fd%d&Z	d+de	de	de	de	de	d ede	de	fd'd(Z	d+de	de	de	de	de	d ede	de	fd)d*ZdS )-    N)load_dotenvT)overridei,  	tenant_idc                 C   s:   t | }|s	d S |d t k rt | d  d S |d S )Nexpiresdb_name)_tenant_cachegettimepop)r   item r   -/var/www/html/fyndo/pharma/fyndo/tenant_db.py
_cache_get   s   
r   r   c                 C   s   |t   t dt| < d S )N)r   r   )r	   
_CACHE_TTLr   r   r   r   r   r   
_cache_set   s   
r   returnc                   C   sJ   dt dd dt dd dt dd	 dt d
d dt dd 
S )u)   Main fyndo DB — has organizations tablepostgresql://MAIN_DB_USERpostgres:MAIN_DB_PASSWORDfyndo123@MAIN_DB_HOST192.168.12.40MAIN_DB_PORT5432/MAIN_DB_NAMEFyndoosgetenvr   r   r   r   	_main_dsn&   s   


r$   c                 C   sB   dt dd dt dd dt dd	 dt d
d d|  
S )u3   Tenant specific DB — same host, different db_namer   r   r   r   r   r   r   r   r   r   r   r   r!   )r   r   r   r   _tenant_dsn/   s   

r%   c              
      s   t | }|rtd|  d|  |S zFtjt dI d H }z3|dt| I d H }|s4td|  d|d }t| | td|  d|  |W |	 I d H  W S |	 I d H  w  tym } ztd	|   d }~ww )
Nu   [TENANT] cache hit — u    → dsnz7SELECT db_name FROM organizations WHERE id = $1 LIMIT 1zTenant z not found in organizationsr   u   [TENANT] resolved — z[TENANT] lookup failed: )
r   printasyncpgconnectr$   fetchrowstr	Exceptionr   close)r   cachedconnrowr   er   r   r   get_tenant_db_name<   s0   

"r3   c                    s&   t | I dH }tjt|dI dH S )z#Get asyncpg connection to tenant DBNr&   )r3   r)   r*   r%   r   r   r   r   get_tenant_connV   s   r4   user_idc                    s   t | I d H }z5|dt|I d H }|s+td| d |d dW | I d H  S td|  t|W | I d H  S | I d H  w )Nz3SELECT id, role_id FROM users WHERE id = $1 LIMIT 1z[TENANT] user z
 not found)idrole_idu   [TENANT] user validated — )r4   r+   r,   r(   r.   dict)r   r5   r0   r1   r   r   r   validate_user`   s   

 r9   chat_idorganization_idworkspace_iduploaded_filesbatch_id
section_idc                    s   t | I d H }tdd |D }	z4|dtt ||||||p#d|	t|td|iI d H }
td|  t|
d W |	 I d H  S |	 I d H  w )Nc                 S   s   g | ]}| d qS )filenamer   ).0fr   r   r   
<listcomp>z   s    z&save_upload_tenant.<locals>.<listcomp>a  
            INSERT INTO workspaceupload
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, filenames, total_files, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)
            RETURNING id
         r=   u+   [TENANT DB] workspaceupload saved — chat=r6   )
r4   jsondumpsr+   r,   uuiduuid4lenr(   r.   )r   r:   r;   r5   r<   r=   r>   r?   r0   	filenamesr1   r   r   r   save_upload_tenantt   s   

 rL   resultc                    s   t | I d H }|dg }tdd |D i }	|	dpd}
zT|dtt ||||||
|	d|	dt|t|d	i t|d
i t|di I d H  |
rc|d|
|I d H  t	d|  W |
 I d H  d S |
 I d H  w )Nclassificationsc                 s   s    | ]
}| d r|V  qdS )r>   NrA   )rB   cr   r   r   	<genexpr>   s    z)save_three_boom_tenant.<locals>.<genexpr>r>   rE   a=  
            INSERT INTO workspacethreeboom
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, product_name, plant,
             classifications, readiness_summary, extraction_summary, validate)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)
        product_nameplantreadiness_summaryextraction_summaryvalidatez7UPDATE workspaceupload SET batch_id=$1 WHERE chat_id=$2u.   [TENANT DB] workspacethreeboom saved — chat=)r4   r   nextexecuter,   rH   rI   rF   rG   r(   r.   )r   r:   r;   r5   r<   rM   r?   r0   rN   firstr>   r   r   r   save_three_boom_tenant   s.   


"rY   c           
         s   t | I d H }|di }	zG|dtt ||||||p$|dp$d|	dd|	dd|	dd|	d	d|	d
t|I d H  td|  W |	 I d H  d S |	 I d H  w )Nsummarya'  
            INSERT INTO workspaceexceptions
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, total_exceptions, critical,
             major, minor, risk_level, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13)
        r>   rE   total_exceptionsr   criticalmajorminor
risk_levelu/   [TENANT DB] workspaceexceptions saved — chat=
r4   r   rW   r,   rH   rI   rF   rG   r(   r.   )
r   r:   r;   r5   r<   rM   r>   r?   r0   sr   r   r   save_exceptions_tenant   s   

"rb   c                    s   t | I d H }|di }	|di }
zJ|dtt ||||||p*|dp*d|	d|
dr?tt|
ddd	 nd |d
dt	|I d H  t
d|  W | I d H  d S | I d H  w )Ninvestigation_summary
trip_scorea  
            INSERT INTO workspacerac
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, risk_level, trip_score,
             approval_status, confirmed, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)
        r>   rE   r_   scorer   d   approval_statusFu(   [TENANT DB] workspacerac saved — chat=)r4   r   rW   r,   rH   rI   intfloatrF   rG   r(   r.   )r   r:   r;   r5   r<   rM   r>   r?   r0   rZ   tripr   r   r   save_rca_tenant   s    
$

"rk   c           	         s   t | I d H }z?|dtt ||||||p|dpd|d|dt|dg dt|I d H  t	d|  W |
 I d H  d S |
 I d H  w )	Na  
            INSERT INTO workspacecapa
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, deviation_id, severity,
             total_actions, plan_status, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)
        r>   rE   deviation_idseveritycapa_actionsPendingu)   [TENANT DB] workspacecapa saved — chat=)r4   rW   r,   rH   rI   r   rJ   rF   rG   r(   r.   )	r   r:   r;   r5   r<   rM   r>   r?   r0   r   r   r   save_capa_tenant   s   

"rp   c           
         s   t | I d H }|di }	zG|dtt ||||||p$|	dp$d|	d|	d|	d|d|d	|d
t|I d H  td|  W |	 I d H  d S |	 I d H  w )Nreport_metadataa@  
            INSERT INTO workspacereports
            (id, organization_id, user_id, workspace_id, section_id,
             chat_id, batch_id, ref_id, severity, generated_date,
             pdf_filename, download_url, evidence_score, response)
            VALUES ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14)
        r>   rE   ref_idrm   generated_datepdf_filenamedownload_urlevidence_coverage_scoreu,   [TENANT DB] workspacereports saved — chat=r`   )
r   r:   r;   r5   r<   rM   r>   r?   r0   metar   r   r   save_report_tenant  s    

"rx   )NN)N)r"   rF   r)   r	   rH   dotenvr   r   r   r,   r   r   r$   r%   r3   r4   r8   r9   listrL   rY   rb   rk   rp   rx   r   r   r   r   <module>   s    

	

!
+
"
$
!