o
    ®iI=                     @   s   d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlZe Zdd	 Zd
d Zdd Zdd Zdd Zdd ZdS )    )requestjsonify)Error)connect_to_database)Prompts)chatgpt_call)closingNc                 C   s  t jdd}|r3zt|}td|   W n ty2 } ztd|  d}W Y d}~nd}~ww t }|sAtddddfS |j	d	d
}z|
d| f | }|d dkr|
d| f | }i }|D ]
}|d ||d < qi|  |  |  t|dddfW S td|  d |
d| f | }	|	s|  |  tddddfW S |	d }
|	d }|	d }|	d }|	d }|	d }|	d }|	d  }|	d! }|	d" }|	d# }|	d$ }|	d% }|	d& }|	d' }|	d( }tj|||||||||||||||d)}t|}|D ]}|
d*|
| ||f q|
d| f | }i }|D ]}|d ||d < q(|  |  |  t|dddfW S  ty{ } z%td+t|  |  |  td,t| dddfW  Y d}~S d}~ww )-za
    Get possible causes for a visit - supports report context from uploaded medical reports
    report_contextNz"Report context received for visit zError parsing report_context: zDatabase connection errortruemessageerror  T
dictionaryzISELECT COUNT(*) AS total_count FROM possible_causes WHERE visits_id = %s;Ztotal_countr   z3SELECT * FROM possible_causes WHERE visits_id = %s;possible_causesidFdatar      zNo data found for visit_id z. Generating with AI...a  
                SELECT 
                    p.id as patient_id,
                    p.fullname AS patient_name,
                    p.gender,
                    p.age,
                    p.fk_doctor,
                    p.allergies,
                    p.medications,
                    v.reasonforvisit AS reasonForConsultation,
                    v.height,
                    v.weight,
                    v.symptoms,
                    v.glucoselevel AS glucoseLevel,
                    v.bloodpressure AS bp,
                    p.tobaccouse AS tobaccoUse,
                    p.alcoholconsumption AS alcoholConsumption,
                    p.dietandexercisehabits AS dietAndExerciseHabits
                FROM 
                    patients p
                JOIN 
                    visits v ON p.id = v.fk_patients
                WHERE 
                    v.id = %s;
            zvisit id not found  
patient_idpatient_namegenderage	fk_doctor	allergiesmedicationsreasonForConsultationheightweightglucoseLevelbp
tobaccoUsesymptomsalcoholConsumptiondietAndExerciseHabits)r	   z
                    INSERT INTO possible_causes (patient_id, visits_id, possible_causes, doctor_id)
                    VALUES (%s, %s, %s, %s);
                zError in get_possible_causes: Internal server error: )r   argsgetjsonloadsprint	Exceptionr   r   cursorexecutefetchonefetchallcommitclosepromptsr   r   str)visit_idr	   e
connectionr.   resultrowsZfiltered_resultsrowaccountr   r   r   r   	doctor_idr   r   r   r   r    r!   r"   r#   ZpatientSymptomsr%   r&   promptr   cause r@   Q/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/PossibleCauses.pyget_possible_causes   s   

(rB   c               
   C   s\  t  } | d}| d}| d}| d}g d}|D ]}|| vs(| | s6td| ddd	f  S qt }zzt| }|d
|||f dd | D }	t	||	 }
|
slt
d| d| d| d nh|d|f |d|f |d|f |d|f |d|f |d|f |d|f |dd|f |dd|f |dd|f |dd|f |dd|f |D ]}|d ||||f q|  W d    n1 sw   Y  W n1 ty } z$|  t
d!t|  td"| ddd#fW  Y d }~W |  S d }~ww W |  n|  w td$d%dd&fS )'Nr6   r=   r   r   )r   r6   r=   r   zMissing required field: r
   r     z
                SELECT possible_causes FROM possible_causes_by_doctor
                WHERE visits_id = %s AND doctor_id = %s AND patient_id = %s
            c                 S   s   h | ]}t |d  qS )r   )int).0r;   r@   r@   rA   	<setcomp>   s    z3update_possible_causes_by_doctor.<locals>.<setcomp>z/All possible causes already exist for visit_id z, doctor_id z, patient_id .z:DELETE FROM possible_causes_by_doctor WHERE visits_id = %sz6DELETE FROM diagnostics_by_doctor WHERE visits_id = %sz,DELETE FROM diagnostics WHERE visits_id = %sz6DELETE FROM medications_by_doctor WHERE visits_id = %sz,DELETE FROM medications WHERE visits_id = %sz/DELETE FROM diet_by_doctor WHERE visits_id = %sz%DELETE FROM diet WHERE visits_id = %sz3UPDATE visits SET possible_cause = %s WHERE id = %s   z0UPDATE visits SET diagnostics = %s WHERE id = %sr   z0UPDATE visits SET medications = %s WHERE id = %sz)UPDATE visits SET diet = %s WHERE id = %sz.UPDATE visits SET food_type = %s WHERE id = %sZvegz
                        INSERT INTO possible_causes_by_doctor (visits_id, doctor_id, patient_id, possible_causes)
                        VALUES (%s, %s, %s, %s)
                    z+Error in update_possible_causes_by_doctor: zInternal server error r   z/Possible causes by doctor updated successfully.false   )r   get_jsonr)   r   r   r   r.   r/   r1   setr,   r2   r-   rollbackr5   r3   )r   r6   r=   r   r   required_fieldsfieldr8   r.   Zexisting_causesZ
new_causesZcause_idr7   r@   r@   rA    update_possible_causes_by_doctor   s   





4$
rP   c              
   C   s  | st ddigdddfS t }z]z't|jdd}d}||| f | }W d    n1 s3w   Y  W n/ tyh } z#td	t|  t dd
| igdddfW  Y d }~W |	  S d }~ww W |	  n|	  w |st ddigdddfS t |dddfS )Nr   zMissing visit_idr
   r   rC   Tr   az  
                SELECT 
                    pc.id AS possible_cause_id,
                    pc.patient_id,
                    pc.visits_id,
                    pc.possible_causes AS cause,
                    pc.created_at AS cause_created_at,
                    pc.updated_at AS cause_updated_at,
                    pcd.id AS possible_cause_by_doctor_id,
                    pcd.doctor_id,
                    pcd.possible_causes AS doctor_cause,
                    pcd.created_at AS doctor_cause_created_at,
                    pcd.updated_at AS doctor_cause_updated_at
                FROM 
                    possible_causes pc
                INNER JOIN 
                    possible_causes_by_doctor pcd
                ON 
                    pc.id = pcd.possible_causes AND pc.visits_id = pcd.visits_id
                WHERE 
                    pc.visits_id = %s
            z'Error in get_possible_causes_by_visit: r'   r   zNo data foundrI   r   r   )
r   r   r   r.   r/   r1   r-   r,   r5   r3   )r6   r8   r.   queryr9   r7   r@   r@   rA   get_possible_causes_by_visit   s*   
*
rR   c               
   C   sF  z{t  } |  }tj}|d}|d}|d}|d}|r%|r%|s/tddddfW S d	}|||||f | }|rV|  |	  | 	  td
dddfW S d}	||	||||f | 
  |j}
|	  | 	  td|
dddfW S  ty } ztdt|  tddt|ddfW  Y d }~S d }~ww )Nr   	visits_idr   r=   8patient_id, visits_id, and possible_causes are required.r
   r   rC   z
            SELECT id FROM possible_causes 
            WHERE patient_id = %s AND visits_id = %s AND possible_causes = %s
        zPossible cause already exists.i  z
            INSERT INTO possible_causes (patient_id, visits_id, possible_causes, doctor_id)
            VALUES (%s, %s, %s, %s)
        z$Possible cause created successfully.rI   )r   Zpossible_cause_idr   rJ   z Error in create_possible_cause: z-Error occurred while creating possible cause.r   r   detailsr   )r   r.   r   r*   r)   r   r/   r0   r1   r3   r2   	lastrowidr   r,   r5   )r8   r.   r   r   rS   r   r=   Zcheck_queryZexisting_recordZinsert_queryZnew_possible_cause_idr7   r@   r@   rA   create_possible_cause  sT   



rX   c              
   C   s   z=t  }| }d}||| f |  |jdkr,|  |  tddddfW S |  |  tdddd	fW S  tyd } ztd
t	|  tddt	|ddfW  Y d }~S d }~ww )Nz)DELETE FROM possible_causes WHERE id = %sr   zPossible cause not found.r
   r   r   z$Possible cause deleted successfully.rI   r   z Error in delete_possible_cause: z-Error occurred while deleting possible cause.rU   r   )
r   r.   r/   r2   rowcountr3   r   r   r,   r5   )r   r8   r.   Zdelete_queryr7   r@   r@   rA   delete_possible_causeY  s0   
rZ   c           
   
   C   s   zht  }| }tj}|d}|d}|d}|d}|r%|r%|s/tddddfW S d	}||||||| f |  |jd
krW|	  |	  tddddfW S |	  |	  tddddfW S  t
y }	 ztdt|	  tddt|	ddfW  Y d }	~	S d }	~	ww )Nr   rS   r   r=   rT   r
   r   rC   z
            UPDATE possible_causes
            SET patient_id = %s, visits_id = %s, possible_causes = %s, doctor_id = %s
            WHERE id = %s
        r   z,Possible cause not found or no changes made.r   z$Possible cause updated successfully.rI   r   z Error in update_possible_cause: z-Error occurred while updating possible cause.rU   r   )r   r.   r   r*   r)   r   r/   r2   rY   r3   r   r,   r5   )
r   r8   r.   r   r   rS   r   r=   update_queryr7   r@   r@   rA   update_possible_causeu  s>   




r\   )flaskr   r   mysql.connectorr   confr   ZServices.promptsr   ZServices.ai_workerr   
contextlibr   r*   r4   rB   rP   rR   rX   rZ   r\   r@   r@   r@   rA   <module>   s     M.;