o
    ¿Ôi¥+  ã                   @   sl   d dl m Z  d dlmZmZ d dlmZ dd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )é    )Údatetime)ÚrequestÚjsonify)Úconnect_to_databasec           
   
   C   s"  z‡zat ƒ }|jdd}| d| f¡ | ¡ }|s+tdddœƒdfW W | ¡  | ¡  S d}| || f¡ | ¡ }g }g }|D ]}| |d	 ¡ | |d
 ¡ q>td||dœdœƒW W | ¡  | ¡  S  ty‡ }	 ztdt	|	ƒiƒdfW  Y d }	~	W | ¡  | ¡  S d }	~	ww | ¡  | ¡  w )NT©Ú
dictionaryú"SELECT id FROM users WHERE id = %súUsers not foundÚtrue©ÚmessageÚerroré”  z™
            SELECT food_type, COUNT(*) AS patient_count
            FROM visits
            WHERE fk_doctor = %s
            GROUP BY food_type
        Ú	food_typeÚpatient_countÚsuccess)Ú
food_typesr   ©ÚstatusÚdatar   é  ©
r   ÚcursorÚexecuteÚfetchoner   ÚcloseÚfetchallÚappendÚ	ExceptionÚstr)
Ú	doctor_idÚconnr   Úuser_existsÚqueryÚresultr   Zpatient_countsÚrowÚe© r'   úH/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/Graph.pyÚget_food_type_stats   sB   
âþ
þ
ü 
€ü
r)   c           	   
   C   s:  z“zmt ƒ }|jdd}| d| f¡ | ¡ }|s+tdddœƒdfW W | ¡  | ¡  S d}| || f¡ | ¡ }g g d	œ}|D ]}|d
  |d
 ¡ |d  |d ¡ q?| ¡  | ¡  td|dœƒdfW W | ¡  | ¡  S  ty“ } ztdt	|ƒiƒdfW  Y d }~W | ¡  | ¡  S d }~ww | ¡  | ¡  w )NTr   r   r	   r
   r   r   z…
        SELECT gender, COUNT(*) as patient_count
        FROM patients
        WHERE fk_doctor = %s
        GROUP BY gender
        )Úgenderr   r*   r   r   r   éÈ   r   r   r   )	r    r!   r   r"   r#   r$   Zgender_statsr%   r&   r'   r'   r(   Úget_patient_gender_stats2   sH   #
Þþþý
ü 
€ü
r,   c           
   
   C   ó$  zˆzbt ƒ }| ¡ }| d| f¡ | ¡ }|s)tdddœƒdfW W | ¡  | ¡  S d}| || f¡ | ¡ }dd„ |D ƒ}d	d„ |D ƒ}d
||dœdœ}| ¡  | ¡  t|ƒdfW W | ¡  | ¡  S  tyˆ }	 ztdt|	ƒiƒdfW  Y d }	~	W | ¡  | ¡  S d }	~	ww | ¡  | ¡  w )Nr   r	   r
   r   r   z¾
            SELECT pc.diagnostics AS cause_name, COUNT(pc.id) AS cause_count
            FROM diagnostics pc
            WHERE pc.doctor_id = %s
            GROUP BY pc.diagnostics
        c                 S   ó   g | ]}|d  ‘qS ©r   r'   ©Ú.0r%   r'   r'   r(   Ú
<listcomp>{   ó    z)get_diagnostics_stats.<locals>.<listcomp>c                 S   r.   ©é   r'   r0   r'   r'   r(   r2   |   r3   r   )ÚlabelsÚdiagnostics_countr   r+   r   r   ©	r   r   r   r   r   r   r   r   r   )
r    Údbr   r"   r#   r$   r6   r7   Úresponser&   r'   r'   r(   Úget_diagnostics_statsb   ó@   &
Ûþþ	
ü 
€ü
r;   c           
   
   C   r-   )Nr   r	   r
   r   r   z¾
            SELECT pc.medications AS cause_name, COUNT(pc.id) AS cause_count
            FROM medications pc
            WHERE pc.doctor_id = %s
            GROUP BY pc.medications
        c                 S   r.   r/   r'   r0   r'   r'   r(   r2   ®   r3   z)get_medications_stats.<locals>.<listcomp>c                 S   r.   r4   r'   r0   r'   r'   r(   r2   ¯   r3   r   )r6   Úmedications_countr   r+   r   r   r8   )
r    r9   r   r"   r#   r$   r6   r=   r:   r&   r'   r'   r(   Úget_medications_stats•   r<   r>   c           
   
   C   r-   )Nr   r	   r
   r   r   zÊ
            SELECT pc.possible_causes AS cause_name, COUNT(pc.id) AS cause_count
            FROM possible_causes pc
            WHERE pc.doctor_id = %s
            GROUP BY pc.possible_causes
        c                 S   r.   r/   r'   r0   r'   r'   r(   r2   á   r3   z-get_possible_causes_stats.<locals>.<listcomp>c                 S   r.   r4   r'   r0   r'   r'   r(   r2   â   r3   r   )r6   Úpossible_causes_countr   r+   r   r   r8   )
r    r9   r   r"   r#   r$   r6   r?   r:   r&   r'   r'   r(   Úget_possible_causes_statsÈ   r<   r@   c              
   C   s\  t j d¡}t j d¡}t j dd¡}|dvr tdddœƒd	fS zptƒ }| ¡ }| d
| f¡ | ¡ }|s?tdddœƒdfW S d}|||| g}|rV|rV|d7 }| ||g¡ |d7 }| ||¡ | 	¡ }	g }
g }|	D ]}|
 
|d ¡ | 
|d ¡ qjd||
|dœdœ}| ¡  | ¡  t|ƒW S  ty­ } ztdt|ƒdœƒdfW  Y d }~S d }~ww )NÚ
start_dateÚend_dateÚgroup_byÚday)rD   ÚmonthÚyearr   zInvalid group_by parameter©r   r   r   r   r	   r
   r   r   af  
            SELECT 
                COUNT(id) as visit_count,
                CASE 
                    WHEN %s = 'day' THEN DATE(visitdate)
                    WHEN %s = 'month' THEN MONTHNAME(visitdate)
                    WHEN %s = 'year' THEN YEAR(visitdate)
                END as label
            FROM visits
            WHERE fk_doctor = %s
        z  AND visitdate BETWEEN %s AND %sz GROUP BY labelr5   r   r   )rC   r6   Úvisit_countr   iô  )r   ÚargsÚgetr   r   r   r   r   Úextendr   r   r   r   r   )r    rA   rB   rC   r!   r   r"   r#   ÚparamsÚresultsr6   Úvisit_countsr%   r:   r&   r'   r'   r(   Úget_visits_statsû   sL   ýþ	
"€ÿrO   c                 C   s,   t  ¡ }|j| j |j|jf| j| jfk  S )N)r   ÚtodayrF   rE   rD   )ÚdobrP   r'   r'   r(   Úcalculate_age?  s   $rR   c              
   C   s‚  zšt ƒ }|jdd}d}| || f¡ | ¡ }ddddddœ}|D ]^}|d }t|ƒ}|dkr8|d  d	7  < q!d
|  krBdkrMn n	|d  d	7  < q!d|  krWdkrbn n	|d  d	7  < q!d|  krldkrwn n	|d  d	7  < q!|d  d	7  < q!| ¡  | ¡  t| ¡ ƒt| ¡ ƒdœddœ}	|	W S  t	yÀ }
 z|r¨| ¡  t
d|
› ƒ dt|
ƒdœW  Y d }
~
S d }
~
ww )NTr   z5SELECT dateOfbirth FROM patients WHERE fk_doctor = %sr   )ú0-18ú19-30ú31-45ú46-60ú60+ÚdateOfbirthé   rS   r5   é   é   rT   é   é-   rU   é.   é<   rV   rW   )Úager   r   )r   r   zError: r   rG   )r   r   r   r   rR   r   ÚlistÚkeysÚvaluesr   Úprintr   )r    r!   r   r#   ZpatientsZ
age_rangesÚpatientrQ   r`   Úresponse_dataÚerrr'   r'   r(   Úget_patient_statsF  sN   û	

þû€ûrh   N)r   Úflaskr   r   Úconfr   r)   r,   r;   r>   r@   rO   rR   rh   r'   r'   r'   r(   Ú<module>   s    ,0333D