o
    GiD                     @   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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)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 |d |d |d |d |d d||d < qi|  |  |  t|dddfW S |
d| f | }	|
d| f | }
|
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. }d/d0 |	D }d1d0 |
D }tj|||||||||||||||||d2}t|}|D ]!} |
d3|| | d4 | d5 | d6 | d7 | d8 | d9 | d: |f
 q=|
d| f | }i }|D ]}|d |d |d |d |d |d |d d||d < qn|  |  |  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 )=z]
    Get medications for a visit - supports report context from uploaded medical reports
    report_contextNz.Report context received for medications visit zError parsing report_context: zDatabase connection errortruemessageerror  T
dictionaryzESELECT COUNT(*) AS total_count FROM medications WHERE visits_id = %s;total_countr   z/SELECT * FROM medications WHERE visits_id = %s;medicationsdurationsaltdosagetimedoseintervalreason)r   r   r   r   r   r   r   idFdatar      a  
                SELECT 
                    pc.possible_causes AS possible_causes
                FROM 
                    possible_causes pc
                RIGHT JOIN 
                    possible_causes_by_doctor pcd
                ON 
                    pc.visits_id = pcd.visits_id AND pc.id = pcd.possible_causes
                WHERE 
                    pc.visits_id = %s;
            at  
                SELECT 
                    d.diagnostics AS diagnostics
                FROM 
                    diagnostics d
                RIGHT JOIN 
                    diagnostics_by_doctor dbd
                ON 
                    d.visits_id = dbd.visits_id AND d.id = dbd.diagnostics
                WHERE 
                    d.visits_id = %s;
            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Patient not found  
patient_idpatient_namegenderage	fk_doctor	allergiesreasonForConsultationheightweightglucoseLevelbp
tobaccoUsealcoholConsumptiondietAndExerciseHabitssymptomsc                 S      g | ]}|d  qS )possible_causes .0itemr.   r.   N/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/Medications.py
<listcomp>       z#get_medications.<locals>.<listcomp>c                 S   r,   )diagnosticsr.   r/   r.   r.   r2   r3      r4   )r   z
                    INSERT INTO medications (patient_id, visits_id, medications, duration, salt, dosage, time, doseinterval, reason, doctor_id)
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
                ZMedicineNameZDurationZSaltZDosageTimeIntervalZReasonzError in get_medications: Internal server error: )r   argsgetjsonloadsprint	Exceptionr   r   cursorexecutefetchonefetchallcommitclosepromptsget_medicationsr   str)!visit_idr   e
connectionr?   resultrowsfiltered_resultsrowr-   r5   accountr   r   r   r    	doctor_idr"   r   r#   r$   r%   r&   r'   r(   r)   r*   patientSymptomspossibleCausesByDoctordiagnosticsByDoctorpromptZmedications_listZmedr.   r.   r2   rF      s  


(rF   c               
   C   s  t  } | d}| d}| d}| d}g d}|D ]}|| vs(| | s6td| ddd	f  S qt }zzt| q}|d
|||f dd | D }	t	||	 }
|
slt
d| d| d| d n<|d|f |d|f |d|f |dd|f |dd|f |dd|f |D ]}|d||||f q|  W d    n1 sw   Y  W n0 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 )!NrH   rP   r   r   )r   rH   rP   r   zMissing required field: r	   r
     z
                SELECT medications FROM medications_by_doctor
                WHERE visits_id = %s AND doctor_id = %s AND patient_id = %s
            c                 S   s   h | ]}t |d  qS )r   )int)r0   rN   r.   r.   r2   	<setcomp>   s    z/update_medications_by_doctor.<locals>.<setcomp>z+All medications already exist for visit_id z, doctor_id z, patient_id .z6DELETE FROM medications_by_doctor WHERE visits_id = %sz/DELETE FROM diet_by_doctor WHERE visits_id = %sz%DELETE FROM diet WHERE visits_id = %sz0UPDATE visits SET medications = %s WHERE id = %s   z)UPDATE visits SET diet = %s WHERE id = %sr   z.UPDATE visits SET food_type = %s WHERE id = %svegz
                        INSERT INTO medications_by_doctor (visits_id, doctor_id, patient_id, medications)
                        VALUES (%s, %s, %s, %s)
                    z'Error in update_medications_by_doctor: zInternal server error r   z+Medications by doctor updated successfully.false   )r   get_jsonr:   r   r   r   r?   r@   rB   setr=   rC   r>   rollbackrG   rD   )r   rH   rP   r   r   required_fieldsfieldrJ   r?   Zexisting_medicationsZnew_medicationsZmedication_idrI   r.   r.   r2   update_medications_by_doctor   sn   





 $
rb   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   rU   Tr   aP  
                SELECT 
                    m.id AS medication_id,
                    m.patient_id,
                    m.visits_id,
                    m.duration,
                    m.salt,
                    m.dosage,
                    m.time,
                    m.doseinterval,
                    m.reason,
                    m.medications AS medication,
                    m.created_at AS medication_created_at,
                    m.updated_at AS medication_updated_at,
                    m_d.id AS medication_by_doctor_id,
                    m_d.doctor_id,
                    m_d.medications AS doctor_medication,
                    m_d.dose_timings,
                    m_d.created_at AS doctor_medication_created_at,
                    m_d.updated_at AS doctor_medication_updated_at
                FROM 
                    medications m
                INNER JOIN 
                    medications_by_doctor m_d
                ON 
                    m.id = m_d.medications AND m.visits_id = m_d.visits_id
                WHERE 
                    m.visits_id = %s
            z#Error in get_medications_by_visit: r8   r   zNo data foundr[   r   r   )
r   r   r   r?   r@   rB   r>   r=   rG   rD   )rH   rJ   r?   queryrK   rI   r.   r.   r2   get_medications_by_visit  s*   
!*
rd   c                  C   s  zt  } |  }tj}|d}|d}|d}|d}|d}|d}|d}	|d}
|d	}|d
}|rQ|rQ|rQ|rQ|rQ|rQ|	rQ|
rQ|rQ|s[tddddfW S d}|||||f | }|r|  |	  | 	  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   rP   r   r   r   r   r   r   spatient_id, visits_id, medications, doctor_id, duration, salt, dosage, time, doseinterval, and reason are required.r	   r
   rU   z{
            SELECT id FROM medications 
            WHERE patient_id = %s AND visits_id = %s AND medications = %s
        zmedications already exists.i  z
            INSERT INTO medications (patient_id, visits_id, medications, doctor_id, duration, salt, dosage, time, doseinterval, reason)
            VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        z!medications created successfully.r[   )r   Zmedications_idr   r\   zError in create_medications: z*Error occurred while creating medications.r   r   detailsr   )r   r?   r   r;   r:   r   r@   rA   rB   rD   rC   	lastrowidr>   r=   rG   )rJ   r?   r   r   re   r   rP   r   r   r   r   r   r   check_queryexisting_recordinsert_queryZnew_medications_idrI   r.   r.   r2   create_medicationsK  sL   









($rm   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 medications WHERE id = %sr   zmedications not found.r	   r
   r   z!medications deleted successfully.r[   r   zError in delete_medication: z'Error occurred while medications cause.rg   r   )
r   r?   r@   rC   rowcountrD   r   r>   r=   rG   )r   rJ   r?   delete_queryrI   r.   r.   r2   delete_medication  s$   
$rp   c                 C   s  zt  }| }tj}|d}|d}|d}|d}|d}|d}	|d}
|d}|d	}|d
}|rQ|rQ|rQ|rQ|rQ|	rQ|
rQ|rQ|rQ|s[tddddfW S d}||||||||	|
|||| f |  |jdkr|	  |	  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   re   r   rP   r   r   r   r   r   r   rf   r	   r
   rU   z
            UPDATE medications
            SET patient_id = %s, visits_id = %s, medications = %s, doctor_id = %s, duration = %s, salt = %s, dosage = %s, time = %s, doseinterval = %s, reason = %s
            WHERE id = %s
        r   z)medications not found or no changes made.r   z!medications updated successfully.r[   r   zError in update_medication: z*Error occurred while updating medications.rg   r   )r   r?   r   r;   r:   r   r@   rC   rn   rD   r>   r=   rG   )r   rJ   r?   r   r   re   r   rP   r   r   r   r   r   r   update_queryrI   r.   r.   r2   update_medication  sB   









(
$rr   )flaskr   r   confr   Services.promptsr   Services.ai_workerr   
contextlibr   r;   rE   rF   rb   rd   rm   rp   rr   r.   r.   r.   r2   <module>   s     T945