o
    ^j                     @  s   d Z ddlmZ ddlmZmZmZ dZd$d	d
Zd%ddZ	d%ddZ
dd Zd&ddZd'ddZd%ddZedddd(d d!Zd)d"d#ZdS )*zHShared usage allocation checks for ingest, STT queue, and API responses.    )annotations)AnyDictOptionalg     V@
table_namestrreturnboolc                 C  s   |  d|f |  d uS )Nz
        SELECT 1
        FROM information_schema.tables
        WHERE table_schema = DATABASE() AND table_name = %s
        LIMIT 1
        )executefetchone)cursorr    r   @/home/aiteam/pcaa-dev/dashboard-backend/usage_allocation_util.py_table_exists
   s
   	r   bidintc                 C  sH   t | dsdS | dt|f |  pi }t|dp"|dp"dS )Npca_business_allocationsr   z
        SELECT monthly_minute_limit, monthly_call_limit
        FROM pca_business_allocations
        WHERE bid = %s
        LIMIT 1
        monthly_minute_limitmonthly_call_limitr   r
   r   r   r   getr   r   rowr   r   r   get_monthly_minute_limit   s   
	
r   c                 C  s>   t | dsdS | dt|f |  pi }t|dpdS )Nr   r   zu
        SELECT validity_months
        FROM pca_business_allocations
        WHERE bid = %s
        LIMIT 1
        validity_monthsr   r   r   r   r   get_validity_months+   s   
	r   c                 C  s   | p|S )Nr   )business_created_atpipeline_created_atr   r   r   pick_onboarding_date;   s   r   c                 C  sv   d }t | dr| dt|f |  pi }|d}d }t | dr6| dt|f |  p0i }|d}t||S )N
businessesz8SELECT created_at FROM businesses WHERE bid = %s LIMIT 1
created_atbusiness_pipeline_configzFSELECT created_at FROM business_pipeline_config WHERE bid = %s LIMIT 1)r   r
   r   r   r   r   )r   r   r   r   r   r   r   r   resolve_onboarding_date?   s"   




r"   r   c                 C  sL   |r|r|dkr
dS |  d||||f |  pi }|dt|dfS )Nr   )NFz
        SELECT
            DATE_ADD(%s, INTERVAL %s MONTH) AS expiry_date,
            DATE_ADD(%s, INTERVAL %s MONTH) < NOW() AS expired
        expiry_dateexpired)r
   r   r   r	   )r   onboarding_dater   r   r   r   r   _compute_validity_statusU   s   
r&   c                 C  sn   | d}| d}t | |sdS t | |sdS | d| d| d t|  p*i dp/d}t|d S )	N
_raw_calls_sarvamresponser   ak  
        SELECT COALESCE(
            SUM(
                CASE
                    WHEN s.transcript IS NOT NULL AND s.transcript != ''
                    THEN COALESCE(s.duration, TIMESTAMPDIFF(SECOND, r.call_starttime, r.call_endtime))
                    ELSE 0
                END
            ),
            0
        ) AS transcribed_seconds
        FROM `z` r
        LEFT JOIN `z#` s ON r.callid = s.callid
        transcribed_seconds<   )r   r
   floatr   r   r   )r   r   	raw_tablesarvam_tablesecondsr   r   r   get_transcribed_minutesd   s   



r/   N)warn_threshold_percentr%   r   r0   r+   Optional[int]Dict[str, Any]c                C  s   t | |}t| |}|dk}d }|stt|| d dd}t| o%||k}	t| o5|	 o5|d uo5||k}
|d u r@t| |}|d u rIt| |}t| ||\}}|||||	|
|||||	p^|dd d|	fd|ffD d	S )
Nr   d      g      Y@c                 S  s   g | ]\}}|r|qS r   r   ).0reasonflagr   r   r   
<listcomp>   s    z-evaluate_usage_allocation.<locals>.<listcomp>usage_limitvalidity_expired)used_minutesr   usage_percent	unlimitedlimit_exhausted
near_limitr   r%   validity_expiry_dater:   blockedblocked_reasons)r/   r   minroundr	   r   r"   r&   )r   r   r0   r%   r   r;   monthly_limitr=   r<   r>   r?   r@   r:   r   r   r   evaluate_usage_allocation   sN   



rF   c                 C  s   t t| |d S )NrA   )r	   rF   )r   r   r   r   r   is_usage_blocked   s   rG   )r   r   r   r	   )r   r   r   r   )r   r   )r   r   )r   r   r0   r+   r   r1   r   r2   )r   r   r   r	   )__doc__
__future__r   typingr   r   r   DEFAULT_WARN_THRESHOLD_PERCENTr   r   r   r   r"   r&   r/   rF   rG   r   r   r   r   <module>   s     





 6