o
    0F)jh
                     @  sl   d Z ddlmZ ddlmZ ddlmZmZmZmZ ddl	m
Z
 ddd	ZdddZdddZdddZdS )z3Per-BID minimum call duration gate for STT workers.    )annotations)datetime)AnyDictOptionalTuple)get_connectionreturnOptional[datetime]c                 C  sr   | d u rd S t | tr| jr| jd dS | S ztt| dd}|jr,|jd dW S |W S  ty8   Y d S w )N)tzinfoZz+00:00)
isinstancer   r   replacefromisoformatstr	Exception)valueparsed r   L/home/aiteam/pcaa-dev/call-proccessing/stt_pipeline/stt/min_duration_gate.py	_parse_dt   s   
r   bidr   Dict[str, Any]c              	   C  s   t  +}| }|dt| f | pi }W d    n1 s"w   Y  W d    n1 s1w   Y  tdt|dp?d|ddS )Nz
                SELECT min_call_duration_s, min_call_duration_effective_at
                FROM business_pipeline_config
                WHERE bid = %s
                LIMIT 1
                r   min_call_duration_smin_call_duration_effective_at)r   r   )r   cursorexecuter   fetchonemaxintget)r   conncurrowr   r   r   load_min_duration_config   s   
	r$   boolc                 C  s0   t |}|d u r
dS t | }|d u rdS ||kS )NFT)r   )call_starttimeeffective_ateffstartr   r   r   min_duration_applies*   s   r*   call_idrecording_url!Tuple[bool, str, Optional[float]]c              	   C  s  ddl m} t| }t|dpd}|dkrdS d}t 4}|  }|d|  dt|f |	 p6i }	|	d}W d   n1 sFw   Y  W d   n1 sUw   Y  t
||d	sddS ||}
|
du rndS |
|k rd
d|
dd| d|
fS dd|
fS )z{
    Return (skip, reason, probed_seconds).
    Skips before Sarvam when probed audio is below the configured minimum.
    r   )probe_wav_duration_from_urlr   )F NNzSELECT call_starttime FROM `z%_raw_calls` WHERE callid = %s LIMIT 1r&   r   Tzactual audio z.1fzs < min sFr/   )stt.recording_prober.   r$   r   r    r   r   r   r   r   r*   )r   r+   r,   r.   cfgmin_sr&   r!   r"   r#   probedr   r   r   should_skip_stt4   s2   	

	
r5   N)r	   r
   )r   r   r	   r   )r	   r%   )r   r   r+   r   r,   r   r	   r-   )__doc__
__future__r   r   typingr   r   r   r   db.connectionr   r   r$   r*   r5   r   r   r   r   <module>   s    



