U
    [Mh+                     @   s   d dl mZ d dlmZ eddee ee dddZeddde	e
fee ee ed	d
dZeddde	e
feee ee edddZdS )    )Config)ActivityWatchSyncz/api/sync-activitywatchN
start_dateend_datec           
   
      s   zddl m }m} | r"|| }n||jjddddd}|rL||}n||j}t }|||}|r|||}ddt	j
 |dW S ddd	W S W n8 tk
r }	 ztd
dt|	 dW 5 d}	~	X Y nX dS )z%Manually sync data from ActivityWatchr   datetimetimezoneZhourZminutesecondZmicrosecondTzSynced data for )successmessagesummaryFz&Failed to sync data from ActivityWatch)r   r     zSync error: Zstatus_codeZdetailN)r   r	   fromisoformatnowutcreplacer   sync_activitywatch_dataZget_summaryr   LOCAL_DEVELOPER_NAME	ExceptionHTTPExceptionstr)
r   r   r   r	   startendsyncr   r   e r   ./real_data_endpoints.pyr      s*    
r   z/api/developers/real-summary)r   r   dbc              
      s  zddl m }m}m} ddlm} | r4|| }n||jjddddd}|r^||}n||j}t	
 r|d}	||	t	j||d }
|
stdt	j d t }|||}|r||	t	j||d }
n|d	}	||	||d
 }
g }d}d}|
D ]4}|d }|d }|d p,d}|d }|d }||7 }d}|r||j|j|jd }| dk }|r|d7 }|dkrtdtdt|d nd}|r"||j|j|jd }| dk rt| d  d}n0| dk rt| d  d}n
|d}nd}|||||||d q
|rbtdd |D t| nd}t||||t	jd}||dW S  tk
r } z(td |  td!d"t| d#W 5 d$}~X Y nX d$S )%z3Get REAL summary of developers based on environmentr   )r   r	   	timedeltatextr
   a  
                SELECT 
                    ar.developer_id,
                    COUNT(*) as activity_count,
                    SUM(ar.duration) as total_duration,
                    MAX(ar.timestamp) as last_activity
                FROM activity_records ar
                WHERE ar.developer_id = :local_dev
                AND ar.timestamp >= :start_date
                AND ar.timestamp <= :end_date
                GROUP BY ar.developer_id
            )Z	local_devr   r   No data found for z, attempting sync...a  
                SELECT 
                    ar.developer_id,
                    COUNT(*) as activity_count,
                    SUM(ar.duration) as total_duration,
                    MAX(ar.timestamp) as last_activity
                FROM activity_records ar
                WHERE ar.developer_id IS NOT NULL
                AND ar.timestamp >= :start_date
                AND ar.timestamp <= :end_date  
                GROUP BY ar.developer_id
                ORDER BY total_duration DESC
            r                  @F)Ztzinfoi  _      i  <   z min agoiQ zh agoz%Y-%m-%dZNever)name	is_activehours_todayproductivityZactivities_count	last_seenc                 s   s   | ]}|d  V  qdS )r/   Nr   ).0Zdevr   r   r   	<genexpr>   s     z.get_real_developers_summary.<locals>.<genexpr>)Ztotal_developersZactive_developerstotal_hoursavg_productivityZenvironment)overview
developersz&Error in get_real_developers_summary: r   z"Error getting developers summary: r   N)r   r	   r!   
sqlalchemyr#   r   r   r   r   r   is_localexecuter   fetchallprintr   r   Ztotal_secondsminmaxintstrftimeappendsumlenZENVIRONMENTr   r   r   )r   r   r    r   r	   r!   r#   r   r   Zdevelopers_queryZdevelopers_resultr   r   r6   r3   active_countZdev_rowdeveloper_idZactivity_countZduration_secondsZlast_activityr.   r-   Z	time_diffr/   r0   r4   r5   r   r   r   r   get_real_developers_summary,   s    
&
$	rE   z+/api/developer/{developer_id}/real-activity)rD   r   r   r    c              
      s  zddl m }m} ddlm} |r0||}n||jjddddd}|rZ||}n||j}t	 r| tj
kr|d}	||	| ||d }
|
d std|  d t }|||}|rtd	 |d
}||| ||d }g }d}ddddddg}t|D ]J\}}|d }|d d }||7 }||||d ||t|  d q|d}||| ||d }|r|d nd}|||| | ddW S  tk
r } z(td|  tddt| dW 5 d}~X Y nX dS )z-Get REAL activity data for specific developerr   r   r"   r
   z
                SELECT COUNT(*) FROM activity_records
                WHERE developer_id = :dev_id
                AND timestamp >= :start_date
                AND timestamp <= :end_date
            )Zdev_idr   r   r$   z, syncing from ActivityWatch...u   ✅ Sync completed successfullya  
            SELECT 
                COALESCE(ar.category, 'Unknown') as category,
                SUM(ar.duration) as total_duration,
                COUNT(*) as activity_count
            FROM activity_records ar
            WHERE ar.developer_id = :dev_id
            AND ar.timestamp >= :start_date
            AND ar.timestamp <= :end_date
            GROUP BY ar.category
            ORDER BY total_duration DESC
        z#8884d8z#82ca9dz#ffc658z#ff7300z#8dd1e1z#d084d0r%   r(   r&   )categoryZdurationcountZcolorz
            SELECT COUNT(DISTINCT application_name) as project_count
            FROM activity_records ar
            WHERE ar.developer_id = :dev_id
            AND ar.timestamp >= :start_date
            AND ar.timestamp <= :end_date
        )r   r   )data
total_timeactive_projectsZ
date_rangez&Error in get_real_developer_activity: r   zError getting activity data: r   N)r   r	   r7   r#   r   r   r   r   r   r8   r   r9   Zfetchoner;   r   r   r:   	enumerater@   rB   Z	isoformatr   r   r   )rD   r   r   r    r   r	   r#   r   r   Zcheck_queryZcount_resultr   r   Zactivity_queryZactivities_resultZactivity_datarI   ZcolorsiZactivityrF   Zduration_hoursZprojects_queryZproject_resultrJ   r   r   r   r   get_real_developer_activity   st    
rM   )NN)Zconfigr   Zactivitywatch_syncr   ZappgetZOptionalr   r   ZDependsZget_dbZSessionrE   rM   r   r   r   r   <module>   s8     % 