U
    7h\                     @   s   d dl mZmZ d dlZd dlmZ d dlZd dlmZ e  e	de
 ZeeZdd Zed e Zed	 eed
Zg ZeD ]X\ZZee\ZZesereeeef ede de deredd nd d qesed ed eedZe ZerzDeed  er<eed  ned  Zed eejedd W n2 e k
r Z! zede!  W 5 dZ![!X Y nX ed eedZg Z"eD ]2\ZZee\ZZesere"eeef qede#e" d e"re$ Z%zpd Z&e"D ]J\ZZZeedeeed e&d7 Z&e&d d kred e& d! qe%'  ed"e& d# W n< e k
r Z! ze%(  ed$e!   W 5 dZ![!X Y nX ed% eed&Ze) Z*e*re*D ] \Z+Z,ed'e+ d(e, d# qned) W 5 Q R X ed* dS )+    )create_enginetextN)Config)load_dotenvDATABASE_URLc                 C   s   zt | trt| }n| }d}d}t |tr|dpJ|dpJ|d}|dp^|d}d|krt |d tr|s|d dp|d d}|s|d dp|d d}|sd|kr|d }|sd	|kr|d	 }||fW S    Y d
S X dS )zAExtract application name and window title from activity_data JSONNappZapplicationZapplication_nametitlewindow_titledataZprogramZprocess)NN)
isinstancestrjsonloadsdictget)Zactivity_datar
   app_namer	    r   ./extract_app_data.pyextract_app_info   s*    


r   z0=== Extracting and Updating Application Data ===z(
1. Analyzing activity_data structure...z
        SELECT id, activity_data
        FROM activity_records
        WHERE activity_data IS NOT NULL 
        AND activity_data != '{}'
        AND (application_name IS NULL OR application_name = '')
        LIMIT 10
    z   ID z: app='z
', title='2   None'z2   Could not extract app info from sample records.z'   Let me check the actual structure...z
            SELECT activity_data 
            FROM activity_records 
            WHERE activity_data IS NOT NULL 
            AND activity_data != '{}'
            LIMIT 1
        z#
   Sample activity_data structure:   )indentz   Error parsing: z/
2. Updating records with extracted app data...z
        SELECT id, activity_data
        FROM activity_records
        WHERE activity_data IS NOT NULL 
        AND activity_data != '{}'
        AND (application_name IS NULL OR application_name = '')
    z	   Found z records to updatez
                    UPDATE activity_records
                    SET application_name = :app_name,
                        window_title = :window_title
                    WHERE id = :id
                )idr   r	      d   z   Updated z records...u   
✅ Successfully updated z recordsu   
❌ Error during update: z!
3. New application distribution:z
        SELECT application_name, COUNT(*) as count
        FROM activity_records
        WHERE application_name IS NOT NULL
        GROUP BY application_name
        ORDER BY count DESC
        LIMIT 20
    z   z: z%   No applications found after updatezM
4. Next step: Run the categorization script to categorize these applications)-Z
sqlalchemyr   r   r   Zconfigr   osZdotenvr   getenvZget_database_urlr   Zenginer   printZconnectZconnZexecuteresultZsample_dataZ	record_idZdata_strr   r	   appendZfetchonerecordr   r   r   r
   dumps	ExceptioneZupdateslenZbeginZtransZupdated_countZcommitZrollbackZfetchallZappsr   countr   r   r   r   <module>   s   "	.& 

	