
    gc                     x    d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d Z
d Zd Zd	 Zd
 ZdZh dZd Zd ZdS )    N)jsonifyrequest)get_db_connection)secure_filename)Imagec                     	 t                      } |                     d          }d}|                    |           |                                }|D ]6}|                    d          pd|d<   |                    d          pd|d<   7|                                 |                                  t          |          S # t          $ r*}t          dt          |          i          d	fcY d }~S d }~ww xY w)
NT
dictionarya}  
            SELECT 
                e.name, 
                COALESCE(GROUP_CONCAT(DISTINCT m.name SEPARATOR ', '), 'No Muscles Found') AS muscle,
                 COALESCE(GROUP_CONCAT(DISTINCT m.display_name SEPARATOR ', '), 'No Muscles Found') AS muscle_display,
                COALESCE(eq.name, 'No Equipment') AS equipment,
                e.description,
                e.image_url
            FROM exercises e
            LEFT JOIN exercise_muscle em ON e.id = em.exercise_id
            LEFT JOIN muscles m ON em.muscle_id = m.id
            LEFT JOIN equipments eq ON e.equipment_id = eq.id
            GROUP BY e.id;
        descriptionNo description available	image_urlYhttps://img.freepik.com/premium-vector/barbell-gym-equipment-bodybuilding_316839-7742.jpgerror  )	r   cursorexecutefetchallgetcloser   	Exceptionstr)connr   query	exercisesexes         6/var/www/wisegym.app/api/functions/exercise_service.pyget_exercisesr      s   / ""-- 	uOO%%	 	Q 	QB "} 5 5 S9SB} ff[11  Q  6QB{OO

y!!! / / /Q())3......./s   B>C 
C5C0*C50C5c                  r   	 t           j        } |                     d          }|                     d          }|                     d          }|                     d          }|st          ddi          dfS t	                      }|                                }|                    d||||f           |                                 |                                 |                                 t          d	d
i          dfS # t          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)Nname	equipmentr   r   r   Exercise name is required  zINSERT INTO exercises (name, equipment_id, description, image_url) VALUES (%s, (SELECT id FROM equipments WHERE name = %s), %s, %s)statuszexercise created   r   r   jsonr   r   r   r   r   commitr   r   r   )datar    r!   r   r   r   r   r   s           r   create_exerciser*   )   sB   /|xxHH[))	hh}--HH[))	 	HG%@ABBCGG "" R9k95	
 	
 	
 	

"4566;; / / /Q())3......./s%   A4D 7B
D 
D6D1+D61D6c                     	 t           j        } |                     d          }|st          ddi          dfS t	                      }|                                }|                    d|f           |                                 |                                 |                                 t          ddi          dfS # t          $ r*}t          dt          |          i          d	fcY d }~S d }~ww xY w)
Nr    r   r"   r#   z%DELETE FROM exercises WHERE name = %sr$   zexercise deleted   r   r&   )r)   r    r   r   r   s        r   delete_exerciser-   D   s    /|xx 	HG%@ABBCGG "">HHH

"4566;; / / /Q())3......./s#   5C  BC   
C4
C/)C4/C4c                  P   	 t           j        } |                     d          }|                     d          }|                     d          }|r|st          ddi          dfS t	                      }|                                }|                    d| d||f           |                                 |                                 |                                 t          d	d
i          dfS # t          $ r*}t          dt          |          i          dfcY d }~S d }~ww xY w)NexerciseNamefieldvaluer   zMissing exerciseName or fieldr#   zUPDATE exercises SET z = %s WHERE name = %sr$   successr,   r   r&   )r)   r    r0   r1   r   r   r   s          r   update_exercise_fieldr3   Y   s3   /|xx''!!!! 	L5 	LG%DEFFKK ""KuKKKeUY][[[

),--s22 / / /Q())3......./s%   A!C1 $BC1 1
D%;D D% D%c                     	 t           j                            d          } t           j                            d          }t                      }|                    d          }d}g }g }| r*|                    d           |                    |            |r*|                    d           |                    |           |r|dd	                    |          z   z  }|d
z  }|                    |t          |                     |	                                }|D ]6}|                    d          pd|d<   |                    d          pd|d<   7|
                                 |
                                 t          |          S # t          $ r*}	t          dt          |	          i          dfcY d }	~	S d }	~	ww xY w)Nmuscler!   Tr	   ac  
            SELECT 
                e.name, 
                COALESCE(GROUP_CONCAT(DISTINCT m.name SEPARATOR ', '), 'No Muscles Found') AS muscle,
                COALESCE(GROUP_CONCAT(DISTINCT m.display_name SEPARATOR ', '), 'No Muscles Found') AS muscle_display,
                COALESCE(eq.name, 'No Equipment') AS equipment,
                e.description,
                e.image_url
            FROM exercises e
            LEFT JOIN exercise_muscle em ON e.id = em.exercise_id
            LEFT JOIN muscles m ON em.muscle_id = m.id  
            LEFT JOIN equipments eq ON e.equipment_id = eq.id
        zm.name = %szeq.name = %sz WHERE z AND z GROUP BY e.idr   r   r   r   r   r   )r   argsr   r   r   appendjoinr   tupler   r   r   r   r   )
r5   r!   r   r   r   
conditionsvaluesresultsr   r   s
             r   filter_exercisesr=   p   s   1/!!(++L$$[11	 ""-- 
 	"m,,,MM&!!! 	%n---MM)$$$ 	:Yj!9!999E!!ueFmm,,,//## 	Q 	QB "} 5 5 S9SB} ff[11  Q  6QB{OO

w / / /Q())3......./s   FF 
F?F:4F?:F?z'/var/www/wisegym.app/api/data/exercises>   gifjpgpngjpegc                 t    d| v o4|                      dd          d                                         t          v S )N.   )rsplitlowerALLOWED_EXTENSIONS)filenames    r   allowed_filerI      s6    (?WxsA66q9??AAEWWW    c                     	 dt           j        vsdt           j        vrt          ddi          dfS t           j        d         } t           j        d         }| j        dk    st          | j                  st          ddi          dfS | j                            d          st          dd	i          dfS | j                            d
d          d         	                                }t          | d          }| d
| }t          j                            t          |          }t          D ]_}t          j                            t          | d
|           }t          j                            |          rt          j        |           `|                     |           t'          j        |          5 }|j        \  }	}
|	dk     s|
dk     r3t          j        |           t          ddi          dfcd d d            S |	dk    s|
dk    r3t          j        |           t          ddi          dfcd d d            S 	 d d d            n# 1 swxY w Y   d| }	 t-                      }|                                }|                    d||f           |                                 |                                 |                                 nL# t6          $ r?}t          j        |           t          dt9          |          d          dfcY d }~S d }~ww xY wt          d|d          dfS # t6          $ r+}t          dt9          |          d          dfcY d }~S d }~ww xY w)Nfiler    r   zMissing file or exercise namer#    zInvalid filezimage/zOnly images allowedrC   rD   	_exercised   zImage too small (min 100x100px)i  z!Image too large (max 1000x1000px)z'https://api.wisegym.app/data/exercises/z3UPDATE exercises SET image_url = %s WHERE name = %sz Failed to update image_url in DB)r   detailsr   r2   )r$   urlr,   zInternal error)r   filesformr   rH   rI   mimetype
startswithrE   rF   r   ospathr8   EXERCISE_UPLOAD_FOLDERrG   existsremovesaver   opensizer   r   r   r(   r   r   r   )rL   r    ext	safe_baserH   	save_pathexisting_extold_pathimgwidthheight
public_urlr   r   db_errr   s                   r   upload_exercise_imagerh      s/   5L&&&*D*DG%DEFFKK}V$|F#=Bl4=&A&AG^455s::}''11 	BG%:;<<cAAm""3**1-3355#t$6$6$677	''#''GLL!7BB	 / 	$ 	$Lw||$:y<Y<Y<<Y<YZZHw~~h'' $	(###		) Z	"" 	TcHME6s{{fsll	)$$$)JKLLcQ		T 	T 	T 	T 	T 	T 	T 	T
 t||v}}	)$$$)LMNNPSS	T 	T 	T 	T 	T 	T 	T 	T
  -	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T 	T JxII
		g$&&D[[]]FNNPS]_cRdeeeKKMMMLLNNNJJLLLL 	g 	g 	gIi   %GTWX^T_T_``aacffffffff	g )J??@@#EE L L L!1c!ffEEFFKKKKKKKLs   .L3 AL3 ,L3 4DL3 5=I2L3 ?2I1L3 ?L3 IL3 IL3 A6K L3 
L4LLL3 LL3 3
M(= M#M(#M()rV   flaskr   r   	db_configr   werkzeug.utilsr   PILr   r   r*   r-   r3   r=   rX   rG   rI   rh    rJ   r   <module>rn      s    				 " " " " " " " " ' ' ' ' ' ' * * * * * *       /  /  /D/ / /6/ / /*/ / /.2/ 2/ 2/h C 222 X X X6L 6L 6L 6L 6LrJ   