o
    dBjb&                     @  sh  U d Z ddlmZ ddlmZmZmZmZ dZde	d< e
dd eD Zd	Zd
e	d< e
dd eD Zdd eD Zddddddddddd
Zdd eD Zdd eD ZdSdTd"d#ZdUdVd(d)ZdUdVd*d+ZdUdVd,d-ZdWd0d1ZdUdXd3d4ZdUdXd5d6ZdYd8d9ZdZd:d;Zd[d=d>Zd\d?d@ZdAdBd]dFdGZdAdBd]dHdIZdAdBd^dKdLZddMd_dQdRZ d$S )`zSMaster-controlled feature entitlements + business analytics module toggles per BID.    )annotations)AnyDictOptionalTuple)
)allow_quality_scoringQuality Scoring)allow_sentimentCustomer Sentiment)allow_talk_listen_ratioTalk/Listen Ratio)allow_data_captureData Capture Points)allow_path_to_conversionPath to Conversion)allow_min_duration_filterMin Duration Filter)allow_propensitySales Propensity)allow_call_summaryzCall Summary)allow_group_filterzGroup Filter)allow_crm_integrationzCRM IntegrationzTuple[Tuple[str, str], ...]ENTITLEMENT_SPECSc                 c  s    | ]\}}|V  qd S N ).0key_r   r   ?/home/aiteam/pcaa-dev/dashboard-backend/feature_entitlements.py	<genexpr>       r   ))quality_scoring_enabledr   r   )sentiment_enabledr	   r
   )talk_listen_enabledr   r   )data_capture_enabledr   r   )path_to_conversion_enabledr   r   )min_duration_filter_enabledr   r   )propensity_enabledr   r   )call_summary_enabledr   zCall Summary Stylez Tuple[Tuple[str, str, str], ...]MODULE_SPECSc                 c  s    | ]}|d  V  qdS )r   Nr   )r   specr   r   r   r   #   r    c                 C  s   i | ]\}}}||qS r   r   )r   
enable_key	allow_keyr   r   r   r   
<dictcomp>%   s    r-   zhQuality scoring is not enabled for your account. Contact your PCA administrator to upgrade this feature.ztCustomer sentiment analysis is not enabled for your account. Contact your PCA administrator to upgrade this feature.zjTalk/listen ratio is not enabled for your account. Contact your PCA administrator to upgrade this feature.zmData capture points are not enabled for your account. Contact your PCA administrator to upgrade this feature.zuPath to conversion insights are not enabled for your account. Contact your PCA administrator to upgrade this feature.zxMinimum call duration filtering is not enabled for your account. Contact your PCA administrator to upgrade this feature.ziSales Propensity is not enabled for your account. Contact your PCA administrator to upgrade this feature.zhCall summaries are not enabled for your account. Contact your PCA administrator to upgrade this feature.zhGroup filtering is not enabled for your account. Contact your PCA administrator to upgrade this feature.zhCRM integration is not enabled for your account. Contact your PCA administrator to upgrade this feature.)
r   r	   r   r   r   r   r   r   r   r   c                 C     i | ]}|d qS Tr   r   r   r   r   r   r-   R       c                 C  r.   r/   r   r0   r   r   r   r-   S   r1   Tvaluer   defaultboolreturnc                 C  s`   | d u r|S t | tr| S t | ttfrtt| S t|   }|dv r(dS |dv r.dS |S )N>   1onyestrueT>   0noofffalseF)
isinstancer4   intfloatstrstriplower)r2   r3   textr   r   r   _as_boolV   s   
rE   NcfgOptional[Dict[str, Any]]Dict[str, bool]c                       pi   fddt D S )Nc                   "   i | ]}|t  |t| qS r   )rE   getDEFAULT_ENTITLEMENTSr0   rF   r   r   r-   g      " z(extract_entitlements.<locals>.<dictcomp>)ENTITLEMENT_KEYSrM   r   rM   r   extract_entitlementse   s   rP   c                   rI   )uI   Business-side module toggles (defaults ON — preserves legacy behavior).c                   rJ   r   )rE   rK   DEFAULT_MODULESr0   rM   r   r   r-   m   rN   z#extract_modules.<locals>.<dictcomp>)MODULE_ENABLE_KEYSrM   r   rM   r   extract_modulesj   s   rS   c                 C  sL   | pi } t | }t| }i }tD ]\}}}||do ||d||< q|S )z3True only when master allowed AND business enabled.T)rP   rS   r)   rK   )rF   entitlementsmodules	effectiver+   r,   _labelr   r   r   effective_modulesp   s   rX   r+   rA   c                 C     t | |dS NT)rX   rK   )rF   r+   r   r   r   module_active{      r[   payloadc                 C  4   | pi } i }t D ]}|| v rt| | d||< q|S NF)rO   rE   r]   updatesr   r   r   r   parse_entitlement_updates      rb   c                 C  r^   r_   )rR   rE   r`   r   r   r   parse_module_updates   rc   rd   r   c                 C  s   t | dS )NzXThis feature is not enabled for your account. Contact your PCA administrator to upgrade.)UPGRADE_MESSAGESrK   )r   r   r   r   upgrade_message   s   rf   c                 C  rY   rZ   )rP   rK   )rF   r   r   r   r   entitlement_allowed   r\   rg   Nonec                 C  s*   ddl m} t| |s|dt|dd S Nr   HTTPException  status_codedetail)fastapirk   rg   rf   )rF   r   rk   r   r   r   require_entitlement   s   
rq   c                 C  sV   ddl m} d }tD ]\}}}||kr|} nq
|r't| |s)|dt|dd S d S ri   )rp   rk   r)   rg   rf   )rF   r+   rk   r,   spec_enable
spec_allowr   r   r   r   _require_module_allowed   s   rt   F	is_masterdataDict[str, Any]rv   c                C  sZ   |rd S t | }tD ] \}}}||dv r*||ds*ddlm} |dt|dq
d S )NT   r6   Tr   rj   rl   rm   )rP   r)   rK   rp   rk   rf   )rF   rw   rv   rT   r+   r,   r   rk   r   r   r   validate_modules_update   s   r{   c                C  s   |rdS t | |dd t| }|ddv r(|d s(ddlm} |d	tdd
|ddv rA|d sCddlm} |d	tdd
dS dS )zHBlock business users from enabling features their plan does not include.NFru   group_filter_enabledry   r   r   rj   rl   rm   r&   r   )r{   rP   rK   rp   rk   rf   )rF   rw   rv   rT   rk   r   r   r   validate_pipeline_config_update   s   r}   summary_modec                C  s\   |rd S ddl m} ||}t| }|dkr*|dds,ddlm} |dtddd S d S )	Nr   normalize_summary_moder3   r   Trj   rl   rm   )summary_configr   rP   rK   rp   rk   rf   )rF   r~   rv   r   moderT   rk   r   r   r   validate_summary_config_update   s   r   )current_summary_modecurrentra   r   c          
      C  s   ddl m} i | |}i }t D ]\}}| |r$||s$d||< q| dr7|ds7d|d< g |d< ||}| dr[|ds[|dkrQd|d< d	|d
< d|d< d|d< |S d|v rvt|d}	|	rjdnd|d< |	rrdnd|d< |S )zGWhen master revokes entitlements, turn off dependent business settings.r   r   r   r|   allowed_groupnamesr   r3   r~   Nsummary_instructionsallow_custom_summaryallow_discovery_recap_summaryrz   )r   r   ALLOW_TO_ENABLEitemsrK   r4   )
r   ra   r   r   mergedpatchr,   r+   r   summary_allowedr   r   r   $side_effects_for_entitlement_changes   s.   r   r/   )r2   r   r3   r4   r5   r4   r   )rF   rG   r5   rH   )rF   rG   r+   rA   r5   r4   )r]   rG   r5   rH   )r   rA   r5   rA   )rF   rG   r   rA   r5   r4   )rF   rG   r   rA   r5   rh   )rF   rG   r+   rA   r5   rh   )rF   rG   rw   rx   rv   r4   r5   rh   )rF   rG   r~   rA   rv   r4   r5   rh   )r   rH   ra   rH   r   rA   r5   rx   )!__doc__
__future__r   typingr   r   r   r   r   __annotations__tuplerO   r)   rR   r   re   rL   rQ   rE   rP   rS   rX   r[   rb   rd   rf   rg   rq   rt   r{   r}   r   r   r   r   r   r   <module>   sP    +
	
	


