U
    Sh                  
   @   s   d dl mZmZ d dlZd dlZd dlmZ d dlmZmZ e  e	dZ
e
se	ddZe	dd	Ze	d
dZe	ddZe	ddZde de de de de 
Z
ee
Zdd Zedkre  dS )    )create_enginetextN)load_dotenv)datetimedateDATABASE_URLDB_HOSTZ	localhostDB_PORTZ5432DB_NAMEZtimesheet_dbDB_USERZpostgresDB_PASSWORD zpostgresql://:@/c                  C   s2  t d t } t d | td}| }t d|d   t d|d   t d|d	   t d
|d   |d r|d nd}|d r|d nd}t d|dd t d|dd t d | td}dd |D }t d|  t d |r|dd D ]}| tdd|i}| }|rt d|  t|D ]V\}}	t d|d  d t d|	d   t d|	d	  d t d |	d   qNqt d! t	 }
| td"d#|
i}| }|r<|D ]X\}}}}|r|nd}|r|nd}|d$ }t d%| d&| d'|dd(|d)d*	 qnt d+ t d, | td-}| }|rt d. |D ]@\}}}}|r|nd}t d%| d&| d/| d'|d0d1	 qtt d2|d d   t d3 t d4 t d5 |rt d6 t d7 n(t d8 t d9 t d: t d; t d< W 5 Q R X dS )=z$Debug why durations are showing as 0z!=== Debugging Duration Issue ===
z*1. Checking duration values in database...a  
            SELECT 
                COUNT(*) as total_records,
                COUNT(CASE WHEN duration IS NULL THEN 1 END) as null_durations,
                COUNT(CASE WHEN duration = 0 THEN 1 END) as zero_durations,
                COUNT(CASE WHEN duration > 0 THEN 1 END) as positive_durations,
                AVG(duration) as avg_duration,
                MAX(duration) as max_duration
            FROM activity_records
        z   Total records: r   z   NULL durations:    z   Zero durations:    z   Positive durations:          z   Average duration: z.2fz secondsz   Max duration: z#
2. Finding actual developer IDs...z
            SELECT DISTINCT CAST(developer_id AS VARCHAR) as dev_id
            FROM activity_records
            WHERE developer_id IS NOT NULL
            ORDER BY 1
        c                 S   s   g | ]}|d  qS )r    ).0rowr   r   ./debug_duration_issue_fixed.py
<listcomp>?   s     z(debug_duration_issue.<locals>.<listcomp>z   Found developers: z(
3. Sample records with duration data...Na  
                    SELECT 
                        CAST(developer_id AS VARCHAR) as dev_id,
                        application_name,
                        duration,
                        timestamp,
                        activity_data
                    FROM activity_records
                    WHERE CAST(developer_id AS VARCHAR) = :dev_id
                    ORDER BY timestamp DESC
                    LIMIT 3
                dev_idz
   Developer: z   - Record r   z
     App: z     Duration: z     Timestamp: z
4. Checking today's data...aG  
            SELECT 
                CAST(developer_id AS VARCHAR) as dev_id,
                COUNT(*) as count,
                SUM(duration) as total_duration,
                AVG(duration) as avg_duration
            FROM activity_records
            WHERE DATE(timestamp) = :today
            GROUP BY developer_id
        todayi  z   z: z
 records, z hours, z.0fz	s averageu      ❌ No data for today!z&
5. Checking latest dates with data...a  
                SELECT 
                    DATE(timestamp) as activity_date,
                    COUNT(DISTINCT CAST(developer_id AS VARCHAR)) as developers,
                    COUNT(*) as records,
                    SUM(duration) / 3600 as total_hours
                FROM activity_records
                GROUP BY DATE(timestamp)
                ORDER BY activity_date DESC
                LIMIT 7
            z   Recent activity dates:z developers, z.1fz hoursu   
   ⚠️ Latest data is from z8   The dashboard is looking for today's data by default.z1   You need to select this date in the dashboard!z
6. SOLUTION:u4      ✓ Data exists for today with positive durationsz7   Check if the dashboard is properly querying the datauF      ⚠️ No data for today - this is why the dashboard shows 0 hours!z   Options:zD   1. Select a different date in the dashboard (use the date picker)z    2. Sync today's activity dataz<   3. Modify the dashboard to show the latest available date)
printengineZconnectZexecuter   ZfetchoneZfetchall	enumerater   r   )ZconnresultZstatsZavg_durZmax_durZdev_idsr   Zrecordsirecordr   Z
today_datacountZ	total_durZtotal_sZavg_sZhoursZdatesZact_dateZdevsZ	hours_valr   r   r   debug_duration_issue   s    

	,(
r$   __main__)Z
sqlalchemyr   r   ZjsonosZdotenvr   r   r   getenvr   r   r	   r
   r   r   r   r$   __name__r   r   r   r   <module>   s$   
" 