U
    R1i3                  "   @   s   d Z ddlZddlmZmZmZ G dd dZedkre Zddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(g"Z	e
d) e
d* e	D ]T\ZZeeeZe
d+ed,d-ed. e
d/ed0 d1d2ed3 d. e
d* qdS )4u:  
Four Categories:
1) PRODUCTIVE  → All work-related activities
2) BROWSER     → YouTube, Gmail, social, entertainment, search, ALL MAIL, generic pages
3) SERVER      → AWS, GCP, Azure, SSH, Docker, monitoring tools, Termius
4) NON-WORK    → Untitled, system lock / idle / AFK / screensaver (ActivityWatch)
    N)DictListTuplec                   @   s\   e Zd Zdd Zdeeeeef dddZdeeedddZ	e
e e
e d	d
dZdS )ActivityCategorizerc              C   C   s  ddddddddd	d
dddddddddg| _ dddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUgC| _dVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddg3| _dddddddddddddddddddddddddddddddddddddddddddddddddddg3| _d S )Nuntitlednew tabblankemptyzgenerallockapp.exelockappzlock screenZsessionlockzsession lockedzwindows default lock screenidlez	idle-timeafkZawayz
not activeZuserinactivezno active windowscreensaverzscreen saver	incognitonew incognito tabprivate browsing	inprivatehomewelcomesearchopenloadingstartpagedefaultportal	dashboardmainindexsitewebonlinehellohi	greetingszwelcome pagez	home pagez
start pageznew pageinboxcomposemailemailz@firsteconomy.comz
@gmail.comz
@yahoo.comz@outlook.comz@hotmail.comzfirst economy mailgmailz
yahoo mailoutlookZ
protonmailZthunderbirdZwebmailyoutubezyoutu.benetflixzamazon primeZ
primevideoZhotstarspotifytwitchfacebook	instagramsnapchattiktok	pinterestreddittwitterzx.comwhatsapptelegramzgoogle.com/searchzbing.com/searchZ
duckduckgoz
google.comzbing.comz	yahoo.comtermiusputty	mobaxterm	securecrtterminalitermZhyperZkittyzwindows terminal
powershellbashawsZec2Zs3lambdaZiamZ
cloudwatchazurezmicrosoft azuregcpzgoogle cloudZfirebaseZdigitaloceanZdropletZlinodeZvultrZvercelZnetlifyZ
cloudflareZgodaddyZ	namecheapZjenkinszgithub actionsz	gitlab ciZcirclecidocker
kubernetesZk8sZpodsZclusterZgrafanaZ
prometheusZdatadogz	new relicZsentrysshrdpZvncZ
teamviewerZanydeskZopenvpnzvisual studiozvs codevscodecursorintellijpycharmphpstormwebstormz.pyz.jsz.tsz.phpz.jsxz.tsxz.htmlz.cssz.jsonz.sql	localhostz	127.0.0.1z:3000z:8000z:5000z:4200postmanZinsomniaz
github.comz
gitlab.com	bitbucketzstack overflowchatgptclaudeZbardZ
perplexityZphindjiranotiontrelloasana
confluenceZclickupfigmazadobe xd	photoshopillustratorcpanelZ
phpmyadmin	filezilla	wordpresswp-adminwp-login)non_work_keywordsbrowser_keywordsserver_keywordsZproductive_keywords)self rc   7/var/www/html/timesheet/backend/activity_categorizer.py__init__   s                                                             '                                                                         zActivityCategorizer.__init__ )window_titleapp_namereturnc                    s  | d|   |   dkr*dS tfdddD rDdS  }t|dkrtd	k rd
dddddddddddddddddg t fdd|D rdS tfdddD rdS d ksd!ksd"ksd#krd$S | jD ]}|kr dS qd%d&d'd(d)g}tfd*d|D r(dS d d+d,d-d.d!d"d#d/g	}d0krdtfd1d|D sddS | jD ]}|krj d2S qj| jD ]}|kr d3S qtfd4dd5D rd2S d6S )7N )rf   r   r   )non-work      ?c                 3   s   | ]}| kV  qd S Nrc   ).0Ztab_word)window_lowerrc   rd   	<genexpr>   s     z:ActivityCategorizer.categorize_activity.<locals>.<genexpr>)r   r   r   r   r   )browserrl         r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   c                 3   s   | ]}| kV  qd S rm   rc   rn   word)generic_single_wordsrc   rd   rp      s     c                 3   s   | ]}| kV  qd S rm   rc   )rn   Z
ssh_clienttextrc   rd   rp      s     )r7   r8   r9   r:   )serverrl   r[   r\   r]   r^   )
productiverl   r$   r%   r'   z mail zall mailc                 3   s   | ]}| kV  qd S rm   rc   )rn   erw   rc   rd   rp      s     rE   ftpsftprF   r7   @c                 3   s   | ]}| kV  qd S rm   rc   )rn   devrw   rc   rd   rp      s     )rq   ffffff?)ry   r   c                 3   s   | ]}| kV  qd S rm   rc   )rn   Zemail_indicatorrw   rc   rd   rp      s     )r$   zcompose mailzfirst economy)rz   g?)lowerstripanysplitlenr_   r`   ra   )rb   rg   rh   wordsru   Zemail_indicatorsZdev_like_with_atrc   )rv   rx   ro   rd   categorize_activity   sj    
          
"





z'ActivityCategorizer.categorize_activityc                    s  |  ||\}}| d|   |dkrhd  kr<d}n(d krJd}nd ksZd kr`d}nd}nr|dkrd	 ksd
 ksd krd}nZd krd}nLd ksd krd}n6d ksd krd}n t fdddD rd}nd}n|dkrXd krd}nRd krd}nBd kr$d}n2d kr4d}n"t fddd D rRd!}nd"}nd# ksld$ krrd%}nhd& krd'}nXd( krd)}nHd* krd+}n8d, krd-}n(d. ksd/ ksd0 krd1}nd2}|||||d3S )4Nrj   rk   r   lockzsystem-lockr   r   rq   r~   r$   r&   r'   r*   entertainmentz?q=r   r   r   zbrowser-tabsc                 3   s   | ]}| kV  qd S rm   rc   rt   rw   rc   rd   rp      s     z<ActivityCategorizer.get_detailed_category.<locals>.<genexpr>)r   r   r   r   r   zgeneric-pageszgeneral-browsingry   r7   z
ssh-clientr?   rA   rB   c                 3   s   | ]}| kV  qd S rm   rc   )rn   rE   rw   rc   rd   rp      s     )rE   r8   r;   zterminal-sshzserver-toolsrG   code.exeZcodingrM   z
dev-serverrN   zapi-testingrW   designr[   zdev-server-toolsr\   r]   r^   zcms-wordpresszproductive-general)categorysubcategory
confidencerg   rh   )r   r   r   )rb   rg   rh   r   r   subrc   rw   rd   get_detailed_category   sj    








z)ActivityCategorizer.get_detailed_category)
activitiesri   c                 C   sB   g }|D ]4}|  |dd|dd}|| || q|S )Nrg   rf   application_name)r   getupdateappend)rb   r   Zcategorizedactivityinforc   rc   rd   categorize_batch  s    


z$ActivityCategorizer.categorize_batchN)rf   )rf   )__name__
__module____qualname__re   strr   floatr   r   r   r   r   rc   rc   rc   rd   r      s   yB?r   __main__)ZHome
chrome.exe)ZWelcomer   )ZSearchr   )ZOpenr   )z
Loading...r   )z
Start Pager   )zTermius - SSH clienttermius.exe)zuser@server - Termiusr   )zPuTTY Configurationz	putty.exe)Z	MobaXtermzmobaxterm.exe)ZUntitledUnknown)zNew Tabr   )zNew Incognito Tabr   )z=Inbox (11,928) - ankita@firsteconomy.com - First Economy Mailr   )zYouTube - Google Chromer   )zGmail - Inbox - Google Chromer   )zclaude.ai - Clauder   )zDashboard - WAAREE Adminr   )zTimesheet Appr   )ZChatGPTr   )z Stack Overflow - Python questionr   )z"cPanel - Web Hosting Control Panelr   )z9waaree_main - live@waaree.com@103.174.103.109 - FileZillafilezilla.exe)zFileZilla - FTP Clientr   )u    My Site ‹ WAAREE — WordPressr   )u<   WAAREE – WordPress › Dashboard ‹ My Site — WordPressr   )u   wp-admin / Edit Page ‹ WAAREEr   )zGoogle Search: python tutorialr   )ZFacebookr   )zmain.py - Visual Studio Coder   )zlocalhost:3000 - React Appr   )zUntitled - Notepadznotepad.exe)zAWS Management Consoler   )zEC2 Dashboardr   zTesting categorization:zP--------------------------------------------------------------------------------zTitle: z<50z App: z<20u   → Category: r   z<12z Subcategory: r   )__doc__retypingr   r   r   r   r   categorizerZ
test_casesprinttitleappr   category_inforc   rc   rc   rd   <module>   sb     * 