U
    h                     @   s   d dl mZmZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ e Zedee
feedd	d
ZeeedddZdS )    )	APIRouterDepends)Session)text)datetimetimezone)get_db)ActivityCategorizerz	/api/sync)	sync_datadbc                    s  zj|  d}|  dg }|  d}|tdd|i }|sJddiW S |d }t }d}d}	|D ]}
z|
 di }|
 dd}|d	k rW qd|
 d|}| d
d}| d| dd}| dd}| dd}dD ]}||d}q|||}td|dd  d|  |r&| dsBd| kr8dnddd}t	||}t
|trlt|dd}n|}td}||||dd  |dd! |r|dd" nd|r|dd" ndt|||d ||d# ttjd$ |d%7 }W qd tk
r0 } z"|	d%7 }	td&|  W Y qdW 5 d}~X Y qdX qd|  td'| d(| d)|	 d* d+t|||	|d,W S  tk
r } z,|  td-|  t|d.d/ W Y S d}~X Y nX dS )0z8Sync endpoint saving all activities including duplicatestokendata	timestampz<SELECT developer_id FROM developers WHERE api_token = :tokenerrorzInvalid tokenr   duration   titleUntitledappapplicationUnknownurl file)z - Google Chromez - Mozilla Firefoxz - Microsoft Edgez - Visual Studio CodezDEBUG: 'N2   z' -> categorychromebrowseruncategorizedgeneral)r   subcategoryZz+00:00aL  
                    INSERT INTO activity_records (
                        developer_id, application_name, window_title,
                        url, file_path, duration, timestamp,
                        category, project_name, project_type,
                        created_at
                    ) VALUES (
                        :developer_id, :application_name, :window_title,
                        :url, :file_path, :duration, :timestamp,
                        :category, :project_name, :project_type,
                        :created_at
                    )
                   i  i  r    )developer_idapplication_namewindow_titler   	file_pathr   r   r   project_nameproject_type
created_at   zError processing event: u   ✅ Synced z activities for z
 (failed: )T)successZreceivedsavedZfailed	developeru   ❌ Sync error: F)r   r,   )getexecuter   fetchoner	   replaceget_detailed_categoryprintlowerextract_project_name
isinstancestrr   fromisoformatintnowr   utc	Exceptioncommitlenrollback)r
   r   r   r   r   r.   r#   categorizerZsaved_countZfailed_counteventZ
event_datar   Zevent_timestampr%   app_namer   r&   suffixcategory_infor'   Zparsed_timestampinsert_querye rH   6/var/www/html/timesheet/backend/fixed_sync_endpoint.pyreceive_sync_data   s    







rJ   )r%   rC   returnc                    s   dd l }|d| }|r&|d S |d| }|rZt fdddD rZ|d S |d| }|rt|dS |d	| }|r|dS |d
| }|r|dS dS )Nr   z2 - ([^-]+) - (?:Visual Studio Code|VS Code|Cursor)r*   u   ^([^–]+) – c                 3   s   | ]}|   kV  qd S )N)r5   ).0iderC   rH   rI   	<genexpr>{   s     z'extract_project_name.<locals>.<genexpr>)intellijpycharmwebstormz\\([^\\]+)\\\.gitzgithub\.com/[^/]+/([^/\s]+)z\\([^\\]+)\\[^\\]+\.[a-z]+$r   )researchgroupstripany)r%   rC   rS   Zvscode_matchZjetbrains_matchZ	git_match
repo_matchZfolder_matchrH   rN   rI   r6   u   s"    


r6   N)fastapir   r   sqlalchemy.ormr   
sqlalchemyr   r   r   databaser   activity_categorizerr	   routerpostdictrJ   r8   r6   rH   rH   rH   rI   <module>   s   i