
    soj!$                        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 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 d dlmZ d dlmZ d dlmZ d dlmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 dedej3        dede"dedededdfdZ4	 	 d&dedej3        ded eded!ede5fd"Z6dedej3        ded edededdfd#Z7	 d&ded eded!ede8e9e9e9e9f         f
d$Z:dedej3        dede"ddf
d%Z;dS )'    )UpdateMessage)ContextTypesN)
BountyGift)	GroupChat)User)BountyGiftStatus)Command)BountyGiftReceivedNotification)ReservedKeyboardKeys)Screen)DevilFruitAbilityType)IncomeTaxEventType)GroupChatExceptionGroupChatError)Keyboard)get_amount_from_stringvalidate_amountget_transaction_taxadd_or_remove_bounty)get_ability_value)full_message_sendget_yes_no_keyboard)send_notification)get_value_from_percentage)get_belly_formattedupdatecontextuserinbound_keyboardtarget_usercommand
group_chatreturnc                 v   K   |t          | |||||           d{V  dS t          | |||           d{V  dS )aX  
    Manage the Bounty gift screen
    :param update: The update object
    :param context: The context object
    :param user: The user object
    :param inbound_keyboard: The keyboard object
    :param target_user: The target user in case of a reply
    :param command: The command
    :param group_chat: The group chat
    :return: None
    N)send_requestkeyboard_interaction)r   r   r   r    r!   r"   r#   s          1/app/src/chat/group/screens/screen_bounty_gift.pymanager)      sj      , 67D+w
SSSSSSSSS
vw6F
G
GGGGGGGGGG    senderreceiverbounty_giftc           
        K   |t          |j                  dk    r%t          |t          j        | d           d{V  dS t          | |||j        d         t          j                                                   d{V sdS t          ||||           d{V \  }}}}	|j
        |	k     rt          |j
        d|dz  z   z            }
t          j                            t          |j
                  t          |          t          |          |t          |	          t          |
                    }t          ||| d           d{V  dS |9|                                t           j        u rt%          t&          j                  dS )a  
    Validate the bounty gift request
    :param update: The update object
    :param context: The context object
    :param sender: The user that wants to send a bounty gift
    :param receiver: The user that wants to receive a bounty gift
    :param command: The command
    :param bounty_gift: The bounty gift object
    :return: True if the request is valid, False otherwise
    Nr   Tr   add_delete_buttonF   d   )len
parametersr   phrasesBOUNTY_GIFT_NO_AMOUNTr   EnvBOUNTY_GIFT_MIN_AMOUNTget_intget_amountsbountyintBOUNTY_GIFT_NOT_ENOUGH_BOUNTYformatr   
get_statusr	   	CONFIRMEDr   r   ITEM_IN_WRONG_STATUS)r   r   r+   r,   r"   r-   amounttax_percentage
tax_amounttotal_amount
max_amountot_texts               r(   validaterH   <   s     ( w!""a''#6vY]          5 %GVW%7%:C<V<^<^<`<`
 
 
 
 
 
 
 
 	 5 >I';> > 8 8 8 8 8 84FNJ
 }|##!~/C*DEFF
7>>..''
++--
++
 
  SWXXXXXXXXXXu ;#9#9#;#;?O?Y#Y#Y !DEEE4r*   c           	      p  K   t          | ||||           d{V sdS t          |||           d{V \  }}}}	t          j                            t          |          |                                t          |          |t          |	                    }
t                      }||_        ||_	        ||_
        ||_        ||_        |                                 t          |t          j        |j                  g}t%          ||
| |           d{V }|j        |_        |                                 dS )aF  
    Send request to send a bounty gift
    :param update: The update object
    :param context: The context object
    :param sender: The user that wants to send a bounty gift
    :param receiver: The user to send the bounty gift to
    :param command: The command
    :param group_chat: The group chat
    :return: None
    N)screenprimary_key)r   keyboard)rH   r:   r5   BOUNTY_GIFT_REQUESTr>   r   get_markdown_mentionr   r+   r,   rB   rC   r#   saver   r   GRP_BOUNTY_GIFTidr   
message_id)r   r   r+   r,   r"   r#   rB   rC   rD   rE   rG   r-   inline_keyboardmessages                 r(   r&   r&   x   sz     & &'68WEEEEEEEE  >IQY[b=c=c7c7c7c7c7c7c4FNJ)00F##%%''J''L)) G )llKK#KK!/K'K
 	F6+A{~^^^-O //        G %/Kr*   c                 n  K   |t          |j        d         |           }n|j        }t          | || j                  }|dk    rt          | t          j        |          }t          |          	                                rt          |          }t          t          ||                    }||z   }||||fS )z
    Get the amounts for a bounty gift
    :param sender: The sender
    :param receiver: The receiver
    :param command: The command
    :param bounty_gift: The bounty gift object
    :return: The amount, tax percentage, tax amount, total amount
    Nr   )r   r4   rB   r   bounty_gift_taxr   r   GIFT_LOAN_TAXfloat
is_integerr<   r   )r+   r,   r"   r-   rB   rC   rD   rE   s           r(   r:   r:      s       '(:1(=vFF#(6;QRRN *)7
 

 ^'')) -^,,.v~FFGGJJ&L>:|;;r*   c           	      2  K   t          j        |                    t          j                            }|j        t          j                 s9|                                 t          |t          j
        | d           d{V  dS |j        }t          | ||||           d{V s|                                 dS t          |||           d{V \  }}}}	||_        ||_        t           j        |_        |                                 |xj        t*          j                                        z  c_        t1          ||	d| d           d{V  t1          ||| t2          j        |j        d           d{V  t          j                            t=          |          |                                t=          |          |t=          |	                    }
t          ||
| d           d{V  tA          ||          }tC          |||           d{V  dS )z
    Keyboard interaction
    :param update: The update object
    :param context: The context object
    :param sender: The user that wants to send a bounty gift
    :param inbound_keyboard: The inbound keyboard
    :return: None
    Tr/   N)r-   F)addr   should_save)r   tax_event_typeevent_idr\   )"r   	get_by_idgetr   DEFAULT_PRIMARY_KEYinfoCONFIRMdelete_instancer   r5   BOUNTY_GIFT_CANCELLEDr,   rH   r:   rB   rC   r	   r@   statusrO   rV   r7   BOUNTY_GIFT_TAX_INCREASEr9   r   r   BOUNTY_GIFTrQ   BOUNTY_GIFT_CONFIRMEDr>   r   rN   r   r   )r   r   r+   r    r-   r,   rB   rC   rD   rE   rG   notifications               r(   r'   r'      s      )21EFF K
  !5!=> ##%%%W26UY
 
 
 	
 	
 	
 	
 	
 	
 	
 	 )H&'68UUUUUUUUU ##%%% >Ik> > > 8 8 8 8 8 84FNJ  K!/K)3K c:BBDDD
v|v[_
`
`
```````` )5          +22F##%%''J''L)) G GWVt
T
T
TTTTTTTT 2&&AAL
GX|
<
<<<<<<<<<<r*   )NN)<src.tg_compatr   r   src.tg_compat.extr   resources.EnvironmentEnvironmentr7   resources.phrasesr5   src.model.BountyGiftr   src.model.GroupChatr   src.model.Userr    src.model.enums.BountyGiftStatusr	   src.model.enums.Commandr
   src.model.enums.Notificationr   $src.model.enums.ReservedKeyboardKeysr   src.model.enums.Screenr   1src.model.enums.devil_fruit.DevilFruitAbilityTyper   -src.model.enums.income_tax.IncomeTaxEventTyper   src.model.error.GroupChatErrorr   r   src.model.pojo.Keyboardr   src.service.bounty_servicer   r   r   r   src.service.devil_fruit_servicer   src.service.message_servicer   r    src.service.notification_servicer   src.utils.math_utilsr   src.utils.string_utilsr   DEFAULT_TYPEr)   boolrH   r&   tupler<   r:   r'    r*   r(   <module>r      s   ) ) ) ) ) ) ) ) * * * * * * # # # # # # # # # # # # + + + + + + ) ) ) ) ) )       = = = = = = + + + + + + G G G G G G E E E E E E ) ) ) ) ) ) S S S S S S L L L L L L M M M M M M M M , , , , , ,            > = = = = = N N N N N N N N > > > > > > : : : : : : 6 6 6 6 6 6HH&H H 	H
 H H H 
H H H HD "9 99&9 9 	9
 9 9 
9 9 9 9x44&4 4 	4
 4 4 
4 4 4 4p VZ <  < <  <+2 <HR <
3S# <  <  <  <FA=A=)6A=@DA=X`A=	A= A= A= A= A= A=r*   