o
    |^j                     @  s   d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
mZmZ ddlmZ dd	d
ZdddZddd ddZddd!ddZdS )"uT   Mcube Classic agent resolution: callhistory links agents via eid → {bid}_employee.    )annotations)AnyDictListOptionalTuple)_column_exists
_first_col_table_exists)valid_phone_sqlexprstrreturnc                 C  s   d|  dS )NzNULLIF(TRIM(CAST(z AS CHAR)), '') )r   r   r   ;/home/aiteam/pcaa-dev/dashboard-backend/mcube_agent_util.py_nullif_trim   s   r   direction_sqloutbound_exprinbound_exprdefault_exprc                 C  s0   | dkr|S d|  d| d|  d| d| dS )NNULLzCASE WHEN LOWER(TRIM(CAST(z AS CHAR))) = 'outbound' THEN z WHEN LOWER(TRIM(CAST(z AS CHAR))) = 'inbound' THEN z ELSE z ENDr   )r   r   r   r   r   r   r   _direction_case   s   r   c
call_aliassource_colsDict[str, str]r   c                C  s$  t | d}t | d}t | d}|r| d| dnd}|r't| d| dnd}|r5t| d| dnd}g }d| v rN| d }	|t| d|	 d |ro|rot||||}
|t|
 |t| |t| n|ry|t| n	|r|t| |sdS dd	|dg  d
S )zGDirection-aware customer phone SQL (Mcube Classic defaults to inbound).callfromcallto	direction.``r   customer_callinfo	COALESCE(, ))r	   r   appendr   r   join)r   r   callfrom_col
callto_coldirection_colr   callfrom_exprcallto_exprcustomer_partscoldirection_awarer   r   r   mcube_customer_callinfo_sql   s0   


r0   src_bidsource_table$Tuple[str, List[Any], str, str, str]c                C  s  t | }t|d}t|dd}t|d}t|d}t|d}	t|d}
|	r/| d|	 d	nd
}|r=t| d| d	nd
}|rKt| d| d	nd
}t||||}|
rgdt| d|
 d	 d| d}t||d}| d}d}g }| d}g }|rt| |rt| |drd| d| d| d}|td td}d| d| d}nd| d}|r|t| d| d	 |rdd	|d
g  d}nd}|||||fS )a  
    Return (join_sql, join_params, agentname_select_sql, agent_phone_select_sql, customer_select_sql).

    Mcube Classic callhistory (no direction column) is treated as inbound:
    - callfrom = customer phone
    - callto / employee.empnumber = agent line
    eid	agentname
agent_namer   r   r   	emp_phoner    r!   r   r#   r$   r%   r   z AS customer_callinfo 	_employeeempnamezLEFT JOIN `z` e ON z	` = e.eidz	e.empnameze.empnumberz, '') AS emp_phonez) AS agentnamez'' AS agentname)
r   stripr	   r   r   r0   r
   r   r&   r'   )cursorr1   r2   r   r   eid_colagentname_colr(   r)   r*   emp_phone_colr   r+   r,   agent_phone_fallbackcustomer_exprcustomer_sqljoin_sqljoin_paramsemployee_tablename_candidatesempnumber_expragent_phone_sqlagentname_sqlr   r   r   resolve_mcube_agent_sql@   sT   




 


rJ   N)r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )
r1   r   r2   r   r   r   r   r   r   r3   )__doc__
__future__r   typingr   r   r   r   r   mcube_group_utilr   r	   r
   mcube_phone_utilr   r   r   r0   rJ   r   r   r   r   <module>   s    

'