o
    cBj@	                     @  sv   d Z ddlmZ ddlmZmZ ddlmZmZ dddddZdddddddZ		d d!ddZ
		d"d#ddZdS )$z?Shared ingest/STT lookback window helpers (0 = start of today).    )annotations)datetime	timedelta)ListTupleNnowlookback_daysintr   datetime | Nonereturnr   c                C  sD   |pt  jdd}t| dkr|jdddddS |tt| d S )z8Earliest call_starttime included in the lookback window.r   )microsecond)hourminutesecondr   )days)r   r   replacer
   r   )r	   r   current r   8/home/aiteam/pcaa-dev/dashboard-backend/lookback_util.pylookback_floor_datetime	   s   r   )stored_watermarkdb_max_startr   r   r   c                  s`   t | |d t| dkr fdd||fD }|rt|S  S dd ||fD }|r.t|S  S )z
    Resolve orchestrator ingest watermark.

    When lookback_days <= 0 (today only), ignore historical raw_calls rows
    before today so re-onboarded BIDs do not re-ingest older calls.
    r   r   c                   s    g | ]}|d ur| kr|qS Nr   .0dfloorr   r   
<listcomp>    s
    z-ingest_watermark_datetime.<locals>.<listcomp>c                 S  s   g | ]}|d ur|qS r   r   r   r   r   r   r   &   s    )r   r
   max)r	   r   r   r   
candidatesr   r   r   ingest_watermark_datetime   s   
r"   call_starttimecolumnstrTuple[str, List[int]]c                 C  s>   t | pd}t| dkr| dg fS | dt| gfS )z9SQL fragment for call_starttime >= lookback window start.r#   r   z >= CURDATE()z$ >= DATE_SUB(NOW(), INTERVAL %s DAY))r%   stripr
   )r	   r$   colr   r   r   sql_call_starttime_min_clause*   s   r)   selected_for_processingmanual_flag_columnc                 C  s6   t | |d\}}t| pd}d| d| d|fS )z
    STT queue eligibility: manual Call Sync / upload rows bypass lookback;
    auto-ingested rows must fall within the lookback window.
    )r$   r*   z
(COALESCE(z, 0) = 1 OR (z)))r)   r%   r'   )r	   r$   r+   lookback_sqllookback_paramsflag_colr   r   r   sql_stt_candidate_clause5   s   	r/   )r	   r
   r   r   r   r   )
r	   r
   r   r   r   r   r   r   r   r   )r#   )r	   r
   r$   r%   r   r&   )r#   r*   )r	   r
   r$   r%   r+   r%   r   r&   )__doc__
__future__r   r   r   typingr   r   r   r"   r)   r/   r   r   r   r   <module>   s    