o
    Ah"'                     @   sp  d dl mZmZmZmZmZ d dlmZ d dlm	Z	m
Z
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Zd d
lZd dlmZ e  e Z e j!dedeej"fdedej#fddZ$e j%de	e deej"fdej#fddZ&e j%dedeej"fde'dej#fddZ(e j!de)deej"eefdedej#defddZ*e j!de)deej"eefdedej#defddZ+e j!d edeej"eefde'dej#defd!d"Z,e j%d#e	e deej"fdej#fd$d%Z-e j%d&e
e'ee	e e.f f deej"eefdej#defd'd(Z/e !d)eej"fd*ed+edej#fd,d-Z0e !d.d*efd/d0Z1e !d1eej"fd*edej#fd2d3Z2e j!d4edeej"fdedej#fd5d6Z3e j%d7edeej"fd8e'dej#fd9d:Z4e j5d7edeej"fd8e'dedej#fd;d<Z6e j7d7e)deej"fd8e'dej#fd=d>Z8d
S )?    )	APIRouterHTTPExceptionDependsRequestBackgroundTasks)JSONResponse)ListDictUnion)database   )SubscriptionTypeCreateSubscriptionTypeSubscriptionCreateSubscriptionPaymentSubscriptionUpdate)User)get_current_userdetails)subscriptionsN)load_dotenvz/subscription-types/)response_modelsubscription_typedbc              
      H   t d z
t| |I d H W S  ty# } ztdt|dd }~ww )Nz6subscription-typessubscription-typessubscription-types  status_codedetail)printsaas_service create_subscription_type_service	Exceptionr   strr   r   e r&   =/var/www/html/moveengine/app/v1/routers/saas/subscriptions.pycreate_subscription_type      r(   c              
      F   t d z	t| I d H W S  ty" } ztdt|dd }~ww )Nz>GET GET subscription-typessubscription-typessubscription-typesr   r   )r   r    list_subscription_types_servicer"   r   r#   r   r%   r&   r&   r'   list_subscription_types!      r-   z/subscription/{subscription_id}subscription_idc              
      r   )NUsubscriptionsubscriptionsubscriptionsubscription4848484848484848484999999999999999999  r   )r   r    get_subscription_servicer"   r   r#   )r/   r   r%   r&   r&   r'   get_subscription,   r)   r3   z
/subscribesubscriptioncurrent_userc              
      J   t d zt| ||I d H W S  ty$ } ztdt|dd }~ww )N-subscribesubscribesubscribe606292626262626262r   r   )r   r    create_subscription_servicer"   r   r#   r4   r   r5   r%   r&   r&   r'   create_subscription8      r:   z/update/c              
      r6   )N)updateupdateupdateupdate75757575757575757r   r   )r   r    update_subscription_servicer"   r   r#   r9   r&   r&   r'   update_subscriptionE   r;   r>   z&/cancel_subscription/{subscription_id}c              
      r6   )N[cancel_subscriptioncancel_subscriptioncancel_subscriptioncancel_subscription888888888888888r1   r   )r   r    cancel_subscription_servicer"   r   r#   )r/   r   r5   r%   r&   r&   r'   cancel_subscriptionR   r;   rA   z/subscriptions/c              
      r*   )Nz(subscriptions 99999999999999999999999999r   r   )r   r    list_subscriptions_servicer"   r   r#   r,   r&   r&   r'   list_subscriptions_   r.   rC   z
/payments/c              
      r   )NzDpaymentspaymentspaymentspaymentspaymentspayments 1111111111111111111i  r   )r   r    list_payments_servicer"   r   r#   )r   r5   r%   r&   r&   r'   list_paymentsj   r)   rE   z/stripe-webhook/requestbackground_tasksc              
      s   t d zJ|  I d H }t d|  z
t| I d H }W n ty5 } zt d| tdddd }~ww t d|d   t| ||I d H  td	d
iW S  tyn } zdd l	}t d|
  tdt|dd }~ww )Nz'stripe-webhook 137137137137137137137137u%   🔔 Incoming Stripe Webhook Payload:u"   ❌ Signature verification failed:  zInvalid Stripe signaturer   u   ✅ Stripe event received: typestatussuccessr   u"   🔥 Exception in webhook handler:r   )r   bodydecoder    verify_stripe_signaturer"   r   stripe_webhook_servicer   	traceback
format_excr#   )rF   rG   r   raw_bodyeventsig_errr%   rP   r&   r&   r'   stripe_webhook   s*   
rU   z/stripe/verifyc              
      sr   t d |  I d H }|d}|stdddzt|I d H }|W S  ty8 } ztdt|dd }~ww )NzAstripe-verifyverifyverifyverify 166166166166166166166166166166166
session_idrH   zSession ID is requiredr   r   )r   jsongetr   r    verify_payment_servicer"   r#   )rF   rL   rV   resultr%   r&   r&   r'   verify_payment   s   
r[   z/stripe/portal/c              
      st   t d |  I d H }|d}|stdddzt||I d H }|W S  ty9 } ztdt|dd }~ww )Nz8stripe-portalportalportalportalportal 783783783183183183r/   rH   zSubscription ID is required.r   r   )r   rW   rX   r   r    create_portal_session_servicer"   r#   )rF   r   rL   r/   rZ   r%   r&   r&   r'   create_portal_session   s   
r]   z/subscription-types/createc              
      sL   t d 	 z
t| |I d H W S  ty% } z	tdd| dd }~ww )Nz7stripe-typescreatecreatecreate 200200200200200200200200r   z$Failed to create subscription type: r   )r   r    r!   r"   r   r$   r&   r&   r'   +create_subscription_type_static_status_true   s   r^   z*/subscription-types/{subscription_type_id}subscription_type_idc              
      r   )Nz@stripe-typescreatecreatecreate 215215215215215215215215215215215r1   r   )r   r    get_subscription_type_servicer"   r   r#   )r_   r   r%   r&   r&   r'   get_subscription_type   r)   ra   c              
      r6   )Nz@stripe-typescreatecreatecreate 227227227227227227227227227227227r   r   )r   r     update_subscription_type_servicer"   r   r#   )r_   r   r   r%   r&   r&   r'   update_subscription_type   r;   rc   c              
      s`   t d zt| |I d H }|stdddddiW S  ty/ } ztdt|dd }~ww )Nz=stripe-typescreatecreatecreate 238238238238238238238238238238r1   zSubscription type not found.r   messagez'Subscription type deleted successfully.r   )r   r     delete_subscription_type_servicer   r"   r#   )r_   r   rK   r%   r&   r&   r'   delete_subscription_type   s   
rf   )9fastapir   r   r   r   r   fastapi.responsesr   typingr   r	   r
   app.dbr   models.saas.subscriptionsr   r   r   r   r   r   models.saas.usersmodelr   dependencies.authr   services.saasr   r    stripeosdotenvr   routerpostget_mongo_dbMongoDBr(   rX   r-   r#   r3   dictr:   r>   rA   rC   intrE   rU   r[   r]   r^   ra   putrc   deleterf   r&   r&   r&   r'   <module>   s     
 
 
