o
    ׿2ik                     @   s   d dl mZ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d ZdS )    )requestjsonifyResponse)connect_to_database)Prompts)chatgpt_call)closingNc           #      C   s  t jdd}t jdd}|r:zt|}td|   W n ty9 } ztd|  d}W Y d}~nd}~ww td|  zt }|sRtdd	d
dfW S |j	dd}z|
d| f | }W n ty } ztdd	t|ddfW  Y d}~W S d}~ww |d dkrz|
d| f | }W n ty } ztdd	t|ddfW  Y d}~W S d}~ww dd |D }|  |  |  t|dddfW S z<|
d| f | }	|
d| f | }
|
d| f | }|
d| f | }|stdd	d
dfW W S W n  ty1 } ztd d	t|ddfW  Y d}~W S d}~ww |d! }|d" }|d# }|d$ }|d% }|d& }|d' }|d( }|d) }|d* }|d+ }|d, }|d- }|d. }|d/ }|d0 }d1d2 |	D }d3d2 |
D }d4d2 |D }ztj||||||||||||||||||||d5} t| }!W n  ty } ztd6d	t|ddfW  Y d}~W S d}~ww z3|!D ]#}"|
d7|d8 | ||"d9 |"d: |"d; |"d< |"d= |"d> |"d? f
 q|
d| f | }W n  ty } ztd@d	t|ddfW  Y d}~W S d}~ww dAd |D }|  |  |  t|dddfW S  tyd } z |rG|  |rN|  tdBd	t|ddfW  Y d}~S d}~ww )Czg
    Get diet plan for a visit - supports report context from uploaded medical reports and pincode
    report_contextNpincode z,Report context received for diet plan visit Error parsing report_context: z Pincode received for diet plan: Database connection errortruemessageerror  T
dictionaryz>SELECT COUNT(*) AS total_count FROM diet WHERE visits_id = %s;zError fetching diet countr   r   detailstotal_countr   z(SELECT * FROM diet WHERE visits_id = %s;Error fetching diet datac                 S   B   i | ]}|d  |d |d |d |d |d |d |d dqS 	idmealweight_gwater_intaketime	food_itemkey_vitaminsbenefits)r   r   r   r   r    r!   r"    .0rowr#   r#   K/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/DietPlan.py
<dictcomp>4       	z get_dietPlan.<locals>.<dictcomp>Fdatar      <  
                    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;
                #  
                    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;
                #  
                    SELECT m.medications AS medications
                    FROM medications m
                    RIGHT JOIN medications_by_doctor mbd
                    ON m.visits_id = mbd.visits_id AND m.id = mbd.medications
                    WHERE m.visits_id = %s;
                  
                    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.fk_doctor,
                        v.food_type,
                        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  Error fetching patient datapatient_namegenderage	fk_doctor	allergiesmedicationsreasonForConsultationheightweightglucoseLevelbp
tobaccoUsealcoholConsumptiondietAndExerciseHabitssymptoms	food_typec                 S      g | ]}|d  qS possible_causesr#   r%   itemr#   r#   r'   
<listcomp>       z get_dietPlan.<locals>.<listcomp>c                 S   rC   diagnosticsr#   rF   r#   r#   r'   rH          c                 S   rC   r8   r#   rF   r#   r#   r'   rH      rL   r
   r	   Error generating diet planz
                        INSERT INTO diet (patient_id, visits_id, doctor_id, meal, weight_g, water_intake, time, food_item, key_vitamins, benefits)
                        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
                    
patient_idr   r   r   r   r    r!   r"   Error inserting diet datac                 S   r   r   r#   r$   r#   r#   r'   r(      r)   Internal server error)r   argsgetjsonloadsprint	Exceptionr   r   cursorexecutefetchonestrfetchallcommitclosepromptsget_diet_planr   )#visit_idr	   r
   e
connectionrY   resultrowsfiltered_resultsrE   rK   medicineaccountr3   r4   r5   	doctor_idr7   r8   r9   r:   r;   r<   r=   r>   r?   r@   patientSymptomsrB   possibleCausesByDoctordiagnosticsByDoctormedicationsByDoctorpromptdietsdietr#   r#   r'   get_dietPlan
   s  
&&	&&&	$rr   c              
   C   s  | st ddigdddfS t }zTz't|jdd}d}||| f | }W d    n1 s3w   Y  W n& ty_ } zt dd	| igddd
fW  Y d }~W |  S d }~ww W |  n|  w |syt ddigdddfS t |dddfS )Nr   zMissing visit_idr   r*     Tr   a  
                SELECT 
                    d.id,
                    d.patient_id,
                    d.visits_id,
                    d.meal,
                    d.weight_g,
                    d.water_intake,
                    d.time,
                    d.food_item,
                    d.key_vitamins,
                    d.benefits,
                    d.created_at AS diet_created_at,
                    d.updated_at AS diet_updated_at,
                    d_p.id AS diet_by_doctor_id,
                    d_p.doctor_id,
                    d_p.diet_id,
                    d_p.created_at AS doctor_diet_created_at,
                    d_p.updated_at AS doctor_diet_updated_at
                FROM 
                    diet d
                inner JOIN 
                    diet_by_doctor d_p
                ON 
                    d.id = d_p.diet_id and d.visits_id = d_p.visits_id
                WHERE 
                    d.visits_id = %s
            zInternal server error: r   zNo data foundfalser1   r,   )r   r   r   rY   rZ   r]   rX   r_   )rb   rd   rY   queryre   rc   r#   r#   r'   get_dietPlan_by_visit   s(   
 *
rv   c               
   C   s  t  } | d}| d}| d}| d}g d}|D ]}|| vs(| | s6td| ddd	f  S qt }zzet| U}|d
|||f dd | D }	t	||	 }
|
slt
d| d| d| d n |d|f d}||d|f |D ]}|d||||f q|  W d    n1 sw   Y  W n' ty } z|  td| dddfW  Y d }~W |  S d }~ww W |  n|  w tddddfS )Nrb   rj   rP   diet_id)rP   rb   rj   rw   zMissing required field: r   r   rs   z
                SELECT diet_id FROM diet_by_doctor
                WHERE visits_id = %s AND doctor_id = %s AND patient_id = %s
            c                 S   s   h | ]}t |d  qS )r   )intr$   r#   r#   r'   	<setcomp>%  s    z,update_dietPlan_by_doctor.<locals>.<setcomp>z$All diet already exist for visit_id z, doctor_id z, patient_id .z/DELETE FROM diet_by_doctor WHERE visits_id = %sz)UPDATE visits SET diet = %s WHERE id = %s   z
                        INSERT INTO diet_by_doctor (visits_id, doctor_id, patient_id, diet_id)
                        VALUES (%s, %s, %s, %s)
                    zInternal server error r   z)diet plan by doctor updated successfully.rt      )r   get_jsonrT   r   r   r   rY   rZ   r]   setrW   r^   rX   rollbackr_   )r+   rb   rj   rP   rw   required_fieldsfieldrd   rY   Zexisting_dietZnew_dietru   r   rc   r#   r#   r'   update_dietPlan_by_doctor  sR   





$
r   c                  C   s  zzt  } |  }tj}|d}|d}|d}|d}|d}|d}|d}	|d}
|d	}|d
}|rR|rR|rR|rR|rR|rR|	rR|
rR|rR|setddddfW W |  |   S d}|||||||||	|
||f
 |   |j	}td|dddfW W |  |   S  t
y } ztddt|ddfW  Y d }~W |  |   S d }~ww |  |   w )NrP   	visits_idrj   r   r   r   r   r    r!   r"   ypatient_id, visits_id, doctor_id, meal, weight_g, water_intake, time, food_item, key_vitamins, and benefits are required.r   r   rs   z
        INSERT INTO diet (patient_id, visits_id, doctor_id, meal, weight_g, water_intake, time, food_item, key_vitamins, benefits)
        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
        zDiet plan created successfully.rt   )r   ZDiet_idr   r|   z(Error occurred while creating diet plan.r   r   )r   rY   r   rU   rT   r   r_   rZ   r^   	lastrowidrX   r\   )rd   rY   r+   rP   r   rj   r   r   r   r   r    r!   r"   insert_queryZnew_Diet_idrc   r#   r#   r'   create_dietPlan>  sF   









(

$

r   c              
   C   s   zgz?t  }| }d}||| f |  |jdkr.tddddfW W |  |  S tdddd	fW W |  |  S  tyg } ztd
dt|ddfW  Y d }~W |  |  S d }~ww |  |  w )NzDELETE FROM diet WHERE id = %sr   zmedications not found.r   r   r1   z!medications deleted successfully.rt   r,   z'Error occurred while medications cause.r   r   )	r   rY   rZ   r^   rowcountr   r_   rX   r\   )r   rd   rY   delete_queryrc   r#   r#   r'   delete_dietPlanf  s*   


$

r   c                 C   s  zzt  }| }tj}|d}|d}|d}|d}|d}|d}	|d}
|d}|d	}|d
}|rR|rR|rR|rR|rR|	rR|
rR|rR|rR|setddddfW W |  |  S d}||||||||	|
|||| f |  |j	dkrtddddfW W |  |  S tddddfW W |  |  S  t
y } ztddt|ddfW  Y d }~W |  |  S d }~ww |  |  w )NrP   r   rj   r   r   r   r   r    r!   r"   r   r   r   rs   z
        UPDATE diet
        SET patient_id = %s, visits_id = %s, doctor_id = %s, meal = %s, weight_g = %s, water_intake = %s, time = %s, food_item = %s, key_vitamins = %s, benefits = %s 
        WHERE id = %s
        r   z)medications not found or no changes made.r1   z!medications updated successfully.rt   r,   z*Error occurred while updating medications.r   r   )r   rY   r   rU   rT   r   r_   rZ   r^   r   rX   r\   )r   rd   rY   r+   rP   r   rj   r   r   r   r   r    r!   r"   update_queryrc   r#   r#   r'   update_dietPlan|  sL   









(



$

r   c           $      C   s  t jdd}t jdd}|r:zt|}td|   W n ty9 } ztd|  d}W Y d}~nd}~ww td|  zPt }|sRtdd	d
dfW S |j	dd}z|
d| f | }W n ty } ztdd	t|ddfW  Y d}~W S d}~ww |d dkrz*|
d| f | }|
d| f | }|r|d }	ntdd	d
dfW W S W n ty } ztdd	t|ddfW  Y d}~W S d}~ww dd |D }
d|	i}|  |  |  ttj|
d|dddddd dfW S zC|
d!| f |
d"| f | }|
d#| f | }|
d$| f | }|
d%| f | }|sAtd&d	d
dfW W S W n  tyb } ztd'd	t|ddfW  Y d}~W S d}~ww |d( }|d) }|d* }|d+ }|d, }|d- }|d. }|d/ }|d0 }|d1 }|d2 }|d3 }|d4 }|d5 }|d6 }|d }d7d8 |D }d9d8 |D } d:d8 |D }!z tj|||||||||||||||| |!|||d;}"t|"d<}#W n  ty } ztd=d	t|ddfW  Y d}~W S d}~ww zN|
d>|d? | |t|#d t|#d@ t|#dA t|#dB t|#dC t|#dD t|#dE t|#dF t|#dG f |
d| f | }W n  tyg } ztdHd	t|ddfW  Y d}~W S d}~ww dId |D }
||dJ}|  |  |  ttj|
d|dddddd dfW S  ty } z |r|  |r|  tdKd	t|ddfW  Y d}~S d}~ww )Lzn
    Get weekly diet plan for a visit - supports report context from uploaded medical reports and pincode
    r	   Nr
   r   z3Report context received for weekly diet plan visit r   z'Pincode received for weekly diet plan: r   r   r   r   Tr   zHSELECT COUNT(*) AS total_count FROM visits WHERE id = %s AND status = 2;zError fetching visit countr   r   r   z/SELECT * FROM weekly_diet WHERE visits_id = %s;z+SELECT food_type FROM visits WHERE id = %s;rB   zFood type not foundr1   r   c                 S      i | ]>}|d  t |d t |d t |d t |d t |d t |d t |d t |d t |d	 d
	qS r   Zday1mealZday2mealZday3mealZday4mealZday5mealZday6mealZday7mealZdoZdonts)	ZDAY1ZDAY2ZDAY3ZDAY4ZDAY5ZDAY6ZDAY7ZDOZDONTSrU   rV   r$   r#   r#   r'   r(         z'get_weekly_dietPlan.<locals>.<dictcomp>F)r+   r   extra)	sort_keysr,   zapplication/json)statusmimetypez,DELETE FROM weekly_diet WHERE visits_id = %sr-   r.   r/   r0   zvisit not foundr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   c                 S   rC   rD   r#   rF   r#   r#   r'   rH   E  rI   z'get_weekly_dietPlan.<locals>.<listcomp>c                 S   rC   rJ   r#   rF   r#   r#   r'   rH   G  rL   c                 S   rC   rM   r#   rF   r#   r#   r'   rH   H  rL   rN   iX  rO   a
  
                        INSERT INTO weekly_diet (patient_id, visits_id, doctor_id, day1meal, day2meal, day3meal, day4meal, day5meal, day6meal, day7meal, do, donts)
                        VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s);
                    rP   r{                        rQ   c                 S   r   r   r   r$   r#   r#   r'   r(   u  r   )rB   r3   rR   )r   rS   rT   rU   rV   rW   rX   r   r   rY   rZ   r[   r\   r]   r^   r_   r   dumpsr`   get_weekly_diet_planr   )$rb   r	   r
   rc   rd   rY   re   rf   rB   Zfood_tprg   
extra_datarE   rK   rh   ri   r3   r4   r5   rj   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rk   rl   rm   rn   ro   rp   r#   r#   r'   get_weekly_dietPlan  sR  
&
&&&&$r   )flaskr   r   r   confr   Services.promptsr   Services.ai_workerr   
contextlibr   rU   r`   rr   rv   r   r   r   r   r   r#   r#   r#   r'   <module>   s     V2-(*