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   titleZUntitledZappZapplicationZUnknownurl file)z - Google Chromez - Mozilla Firefoxz - Microsoft Edgez - Visual Studio CodezDEBUG: 'N2   z' -> categoryZchromeZbrowserZ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_idZapplication_namewindow_titler   	file_pathr   r   r   project_nameZproject_typeZ
created_at   zError processing event: u   ✅ Synced z activities for z
 (failed: )T)successZreceivedZsavedZfailed	developeru   ❌ Sync error: F)r   r"   )getZexecuter   Zfetchoner	   replaceZget_detailed_categoryprintlowerextract_project_name
isinstancestrr   ZfromisoformatintZnowr   Zutc	ExceptionZcommitlenZrollback)r
   r   r   r   r   r#   r   ZcategorizerZsaved_countZfailed_countZeventZ
event_datar   Zevent_timestampr   app_namer   r   suffixZcategory_infor   Zparsed_timestampZinsert_querye r1   ./fixed_sync_endpoint.pyreceive_sync_data   s    







r3   )r   r.   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)r'   ).0Zider.   r1   r2   	<genexpr>{   s     z'extract_project_name.<locals>.<genexpr>)ZintellijZpycharmZwebstormz\\([^\\]+)\\\.gitzgithub\.com/[^/]+/([^/\s]+)z\\([^\\]+)\\[^\\]+\.[a-z]+$r   )researchgroupstripany)r   r.   r8   Zvscode_matchZjetbrains_matchZ	git_matchZ
repo_matchZfolder_matchr1   r6   r2   r(   u   s"    


r(   N)Zfastapir   r   Zsqlalchemy.ormr   Z
sqlalchemyr   r   r   Zdatabaser   Zactivity_categorizerr	   ZrouterZpostdictr3   r*   r(   r1   r1   r1   r2   <module>   s   i