o
    ^iw                     @   sb  d dl Z d dlZd dlmZ ddiZi ddddd	d
dddddddddddddddddddddd d!d"d#dd$d%i d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDd	dEdFdGdHdIdJdKdLdMdNdOdPdQdRZeee ee  Z	dSdTgZ
dUdVdWdXZdYdZd[dXZG d\d] d]ZdS )^    N)CONFIGc   m   }                                          i)     i^     i     i     i     i     i     i     i  i?     iX     i     i     i     i     iR     ik     i     i     i~     i     i     iF     iw     i     i  i                                      )i  i  i  i4  i  i.	  	  i  i  iX  i'  	fanbasis2fanbasiszShttps://payment.parvaty.com/salescc/?ref=GE&product_id={pid}&provider=fanbasis&T=GEzThttps://payment.parvaty.com/salescc/?ref=GE&product_id={pid}&provider=fanbasis2&T=GEzOhttps://payment.parvaty.com/salescc/?ref=GE&product_id={pid}&provider=whop&T=GE)r9   r8   whopzZhttps://payment.parvaty.com/sales?ref=GE&product_id={pid}&provider=fanbasis&semi=true&T=GEz`https://payment.parvaty.com/sales?ref=GE&product_id={pid}&provider=fanbasis2&semi=true&T=GE&T=GEz[https://payment.parvaty.com/sales?ref=GE&product_id={pid}&provider=whop&semi=true&T=GE&T=GEc                   @   sX   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdddZdddZ	dd Z
dd ZdS )LinkResolverc                 C   s*   t d | _t | _dd | jD | _d S )N	providersc                 S   s   i | ]}|d qS r    .0pr>   r>   (/var/www/html/bot-teams/link_resolver.py
<dictcomp>    s    z)LinkResolver.__init__.<locals>.<dictcomp>)r   r<   	threadingLock_lock_usageselfr>   r>   rB   __init__   s   

zLinkResolver.__init__c                    s   j C fdd|D }|st|W  d    S t|   fdd| D }t|}j|dd j|< |W  d    S 1 sIw   Y  d S )Nc                    s&   i | ]}| j v r| j |d qS r=   )rG   getr?   rH   r>   rB   rC   $   s   & z/LinkResolver._pick_provider.<locals>.<dictcomp>c                    s   g | ]
\}}| kr|qS r>   r>   r@   rA   c)	min_countr>   rB   
<listcomp>'   s    z/LinkResolver._pick_provider.<locals>.<listcomp>r      )rF   randomchoiceminvaluesitemsrG   rK   )rI   allowed
candidates
least_usedchosenr>   )rN   rI   rB   _pick_provider"   s   
$zLinkResolver._pick_providerc                 C   s(   |t v rt| j|dS t| j|dS )N)pid)SALE_CCSALE_CC_URLSformat	SEMI_URLS)rI   amountr[   providerr>   r>   rB   
_build_url,   s   zLinkResolver._build_urlc                 C   s$   |t v rt | S |tv rt| S d S N)r\   SEMI_UPSELLrI   r`   r>   r>   rB   _get_pid1   s   zLinkResolver._get_pidc                 C   s   |dkrt S | jS )Nr7   )HIGH_VALUE_PROVIDERSr<   re   r>   r>   rB   _get_allowed_providers6   s   z#LinkResolver._get_allowed_providersNc                 C   sz   |  |}|d u rd S | |}|r||v r|}n|r"||vr"|}n| |}| |||}|tv r4dnd}||||dS )NzSale CCzCC Semi Upsell)ra   urltyper`   )rf   rh   rZ   rb   r\   )rI   r`   forced_providerr[   rV   ra   ri   	link_typer>   r>   rB   get_link:   s   


zLinkResolver.get_linkc                 C   sN  |t v r| j||d}|rd |d< |gS d }d }t D ]}||kr&|d u r&|}||kr,|}q|r3|| ntd}|r=|| ntd}||krh|dkrh| j||d}|rg|dkr`d|dd| d	nd |d< |gS n"|dkr| j||d}|r|dkrd|dd
| d	nd |d< |gS d }	td}
t D ]-}||kr n&|| }t D ]}|| }t|| }||
k r|}
||||f}	||kr nqq|	r	|
dkr	|	\}}}}| j||d}| j||d}|r	|r	||krdnd}d|dd|dd|dd| d| d	|d< d |d< ||gS |r%| j||d}|r%d|dd
| d	|d< |gS d S )N)rk   noteinf2   r   z
Closest: $,z (-$)z (+$d   +-zSplit: $z + $z = $z ($z
Nearest: $)ALL_AMOUNTSrm   floatabs)rI   requested_amountrk   linknearest_highernearest_loweradiff_higher
diff_lower
best_combo	best_diffa1	remaininga2totaldifflink1link2signr>   r>   rB   smart_resolveH   sr   $$.zLinkResolver.smart_resolvec                    sT   | j  t| j pd  fdd| j D W  d    S 1 s#w   Y  d S )NrP   c                    s*   i | ]\}}||t |  d  ddqS )rs   rP   )countpct)roundrL   r   r>   rB   rC      s   * z*LinkResolver.get_stats.<locals>.<dictcomp>)rF   sumrG   rT   rU   rH   r>   r   rB   	get_stats   s   $zLinkResolver.get_statsc                 C   s   t S rc   )rw   rH   r>   r>   rB   get_available_amounts   s   z"LinkResolver.get_available_amountsrc   )__name__
__module____qualname__rJ   rZ   rb   rf   rh   rm   r   r   r   r>   r>   r>   rB   r;      s    


Br;   )rQ   rD   configr   r\   rd   sortedlistkeysrw   rg   r]   r_   r;   r>   r>   r>   rB   <module>   s    