o
    pj                     @  s   d Z ddlmZ ddlmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ d&ddZd'ddZd(ddZdd Zd)d#d$Z d%S )*z1Resolve effective apps and limits for one tenant.    )annotations)datetimetimezone)Decimal)Any)select)get_control_plane_session)AppPlanTenant	TenantAppTenantLimitTenantSubscription)usage_snapshot)get_storage_snapshot)evaluate_subscription)stripe_readiness	tenant_idstrreturndict[str, Any]c                   s*  t  }|t| }|d u rtd|  |tttj| k	d
 }|r0|t|jnd }|tttjdtj  }|tttj| k  }dd |D  |tttj| k  }|rv|jnd}t||r|jnd }	|	d |jttj ||	d |	d	 |	d
 |r|jnd |r|jn|j|r|jnd |r|j nd |r|j!nd |rt"|j#nd d|rt$|j%nd |rt$|j&nd |rt'|j(ndd
 fdd|D dd |D d}
W d    n1 sw   Y  t)| |
d< t*| + |
d d< t, |
d< |
S )NzTenant not found:    Tc                 S  s   i | ]}|j |qS  app_id).0bindingr   r   B/var/www/html/flask_server/bridge_platform/entitlements/service.py
<dictcomp>-   s    z.get_effective_entitlements.<locals>.<dictcomp>missingaccess_allowedin_grace_periodgrace_untilaccess_reason)idcodenamecurrencyprice_monthlyF)
statusactiver!   r"   r#   providerplancurrent_period_startcurrent_period_endcancel_at_period_endc                   s"   g | ]}t | |jd qS ))subscription_active)_app_payloadgetr   r   appapp_bindingsr0   r   r   
<listcomp>N   s    
z.get_effective_entitlements.<locals>.<listcomp>c                 S  s&   i | ]}|j |j|j|j|jd qS ))valuewindow_secondsoverage_policyr   )
limit_namelimit_valuer9   r:   r   )r   recordr   r   r   r   V   s    )r   generated_atsubscriptionappslimitsusage
storage_mbbilling)-r   r2   r   LookupErrorexecuter   r   wherer   limitscalar_one_or_noner
   plan_idr	   	is_activeis_order_bydisplay_namescalarsallr   r   r)   r   metadata_jsonr   nowr   utc	isoformatr+   r%   r&   r'   _numberr(   _isor-   r.   boolr/   r   r   to_dictr   )r   sessiontenantr?   r,   catalogtenant_appsrA   subscription_status	lifecyclepayloadr   r5   r   get_effective_entitlements   s   E
r`   r   rW   c                   s2   t | }|d d sdS t fdd|d D S )Nr?   r*   Fc                 3  s$    | ]}|d   ko|d V  qdS )r   enabledNr   r3   r   r   r   	<genexpr>j   s
    
z*subscription_allows_app.<locals>.<genexpr>r@   )r`   any)r   r   entitlementsr   r   r   subscription_allows_appf   s   re   r4   r	   r   TenantApp | Noner0   c                C  s\   t | jpi }| j| j|dpd|dpdt|o|jo|| j|r*|jp'i dS i dS )Ndescription categorybusiness)r   r&   rg   ri   ra   route_prefixconfig)	dictrQ   r   rN   r2   rW   
is_enabledrk   config_json)r4   r   r0   metadatar   r   r   r1   p   s   r1   c                 C  s   t | tr	t| S | S N)
isinstancer   floatr8   r   r   r   rU      s   
rU   r8   datetime | None
str | Nonec                 C  s   | r|   S d S rq   )rT   rt   r   r   r   rV      s   rV   N)r   r   r   r   )r   r   r   r   r   rW   )r4   r	   r   rf   r0   rW   r   r   )r8   ru   r   rv   )!__doc__
__future__r   r   r   decimalr   typingr   
sqlalchemyr   config.control_planer   bridge_platform.tenants.modelsr	   r
   r   r   r   r   bridge_platform.quotas.servicer   bridge_platform.storage.servicer   !bridge_platform.billing.lifecycler   &bridge_platform.billing.stripe_adapterr   r`   re   r1   rU   rV   r   r   r   r   <module>   s"     

L

