U
    gQ>                     @   s   d 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
 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 erddlmZ G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdS )z;This module contains the Telegram Business related classes.    )datetime)TYPE_CHECKINGOptionalSequenceTuple)Chat)Location)Sticker)TelegramObject)User)parse_sequence_arg)extract_tzinfo_from_defaultsfrom_timestamp)JSONDict)Botc                	       sh   e Zd ZdZdZddedeeeee	e
 d fddZede	e
 e	d	 e	d  d
 fddZ  ZS )BusinessConnectiona3  
    Describes the connection of the bot with a business account.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal if their :attr:`id`, :attr:`user`, :attr:`user_chat_id`, :attr:`date`,
    :attr:`can_reply`, and :attr:`is_enabled` are equal.

    .. versionadded:: 21.1

    Args:
        id (:obj:`str`): Unique identifier of the business connection.
        user (:class:`telegram.User`): Business account user that created the business connection.
        user_chat_id (:obj:`int`): Identifier of a private chat with the user who created the
            business connection.
        date (:obj:`datetime.datetime`): Date the connection was established in Unix time.
        can_reply (:obj:`bool`): True, if the bot can act on behalf of the business account in
            chats that were active in the last 24 hours.
        is_enabled (:obj:`bool`): True, if the connection is active.

    Attributes:
        id (:obj:`str`): Unique identifier of the business connection.
        user (:class:`telegram.User`): Business account user that created the business connection.
        user_chat_id (:obj:`int`): Identifier of a private chat with the user who created the
            business connection.
        date (:obj:`datetime.datetime`): Date the connection was established in Unix time.
        can_reply (:obj:`bool`): True, if the bot can act on behalf of the business account in
            chats that were active in the last 24 hours.
        is_enabled (:obj:`bool`): True, if the connection is active.
    )	can_replydateid
is_enableduseruser_chat_idN
api_kwargsr   )r   r   r   r   r   r   r   c                   s\   t  j|d || _|| _|| _|| _|| _|| _| j| j| j| j| j| jf| _| 	  d S Nr   )
super__init__r   r   r   r   r   r   	_id_attrs_freeze)selfr   r   r   r   r   r   r   	__class__ 6/tmp/pip-unpacked-wheel-swnnwir2/telegram/_business.pyr   N   s    	zBusinessConnection.__init__r   databotreturnc                    sV   |  |}|sdS t|}t|d|d|d< t|d||d< t j||dS ),See :meth:`telegram.TelegramObject.de_json`.Nr   )tzinfor   r%   r&   )_parse_datar   r   getr   de_jsonr   )clsr%   r&   Z
loc_tzinfor    r"   r#   r-   l   s    
zBusinessConnection.de_json)N)__name__
__module____qualname____doc__	__slots__strintr   boolr   r   r   classmethodr-   __classcell__r"   r"   r    r#   r   &   s&     r   c                       sf   e Zd ZdZdZddeeee e	e
 d fddZede	e
 e	d e	d  d	 fd
dZ  ZS )BusinessMessagesDeleteda  
    This object is received when messages are deleted from a connected business account.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal if their :attr:`business_connection_id`, :attr:`message_ids`, and
    :attr:`chat` are equal.

    .. versionadded:: 21.1

    Args:
        business_connection_id (:obj:`str`): Unique identifier of the business connection.
        chat (:class:`telegram.Chat`): Information about a chat in the business account. The bot
            may not have access to the chat or the corresponding user.
        message_ids (Sequence[:obj:`int`]): A list of identifiers of the deleted messages in the
            chat of the business account.

    Attributes:
        business_connection_id (:obj:`str`): Unique identifier of the business connection.
        chat (:class:`telegram.Chat`): Information about a chat in the business account. The bot
            may not have access to the chat or the corresponding user.
        message_ids (Tuple[:obj:`int`]): A list of identifiers of the deleted messages in the
            chat of the business account.
    )business_connection_idchatmessage_idsNr   )r:   r;   r<   r   c                   sB   t  j|d || _|| _t|| _| j| j| jf| _|   d S r   )r   r   r:   r;   r   r<   r   r   )r   r:   r;   r<   r   r    r"   r#   r      s    
z BusinessMessagesDeleted.__init__r   r$   c                    s8   |  |}|sdS t|d||d< t j||dS )r(   Nr;   r*   )r+   r   r-   r,   r   r.   r%   r&   r    r"   r#   r-      s
    
zBusinessMessagesDeleted.de_json)N)r/   r0   r1   r2   r3   r4   r   r   r5   r   r   r   r7   r-   r8   r"   r"   r    r#   r9      s      r9   c                       sp   e Zd ZdZdZdddee ee ee ee d fddZ	e
dee ed ed  d	 fd
dZ  ZS )BusinessIntroa3  
    This object contains information about the start page settings of a Telegram Business account.

    Objects of this class are comparable in terms of equality.
    Two objects of this class are considered equal, if their
    :attr:`title`, :attr:`message` and :attr:`sticker` are equal.

    .. versionadded:: 21.1

    Args:
        title (:obj:`str`, optional): Title text of the business intro.
        message (:obj:`str`, optional): Message text of the business intro.
        sticker (:class:`telegram.Sticker`, optional): Sticker of the business intro.

    Attributes:
        title (:obj:`str`): Optional. Title text of the business intro.
        message (:obj:`str`): Optional. Message text of the business intro.
        sticker (:class:`telegram.Sticker`): Optional. Sticker of the business intro.
    )messagestickertitleNr   )rA   r?   r@   r   c                   s>   t  j|d || _|| _|| _| j| j| jf| _|   d S r   )r   r   rA   r?   r@   r   r   )r   rA   r?   r@   r   r    r"   r#   r      s    zBusinessIntro.__init__r   r$   c                    s8   |  |}|sdS t|d||d< t j||dS )r(   Nr@   r*   )r+   r	   r-   r,   r   r=   r    r"   r#   r-      s
    
zBusinessIntro.de_json)NNN)N)r/   r0   r1   r2   r3   r   r4   r	   r   r   r7   r-   r8   r"   r"   r    r#   r>      s(        r>   c                       sf   e Zd ZdZdZdddeee ee d fddZ	e
dee ed ed  d	 fd
dZ  ZS )BusinessLocationaD  
    This object contains information about the location of a Telegram Business account.

    Objects of this class are comparable in terms of equality.
    Two objects of this class are considered equal, if their
    :attr:`address` is equal.

    .. versionadded:: 21.1

    Args:
        address (:obj:`str`): Address of the business.
        location (:class:`telegram.Location`, optional): Location of the business.

    Attributes:
        address (:obj:`str`): Address of the business.
        location (:class:`telegram.Location`): Optional. Location of the business.
    )addresslocationNr   )rC   rD   r   c                   s0   t  j|d || _|| _| jf| _|   d S r   )r   r   rC   rD   r   r   )r   rC   rD   r   r    r"   r#   r     s
    
zBusinessLocation.__init__r   r$   c                    s8   |  |}|sdS t|d||d< t j||dS )r(   NrD   r*   )r+   r   r-   r,   r   r=   r    r"   r#   r-   $  s
    
zBusinessLocation.de_json)N)N)r/   r0   r1   r2   r3   r4   r   r   r   r   r7   r-   r8   r"   r"   r    r#   rB      s"      rB   c                       s   e Zd ZdZdZddeeee d fddZee	eeef dd	d
Z
ee	eeef dddZee	eeef dddZ  ZS )BusinessOpeningHoursIntervala  
    This object describes an interval of time during which a business is open.

    Objects of this class are comparable in terms of equality.
    Two objects of this class are considered equal, if their
    :attr:`opening_minute` and :attr:`closing_minute` are equal.

    .. versionadded:: 21.1

    Examples:
        A day has (24 * 60 =) 1440 minutes, a week has (7 * 1440 =) 10080 minutes.
        Starting the the minute's sequence from Monday, example values of
        :attr:`opening_minute`, :attr:`closing_minute` will map to the following day times:

        * Monday - 8am to 8:30pm:
            - ``opening_minute = 480`` :guilabel:`8 * 60`
            - ``closing_minute = 1230`` :guilabel:`20 * 60 + 30`
        * Tuesday - 24 hours:
            - ``opening_minute = 1440`` :guilabel:`24 * 60`
            - ``closing_minute = 2879`` :guilabel:`2 * 24 * 60 - 1`
        * Sunday - 12am - 11:58pm:
            - ``opening_minute = 8640`` :guilabel:`6 * 24 * 60`
            - ``closing_minute = 10078`` :guilabel:`7 * 24 * 60 - 2`

    Args:
        opening_minute (:obj:`int`): The minute's sequence number in a week, starting on Monday,
            marking the start of the time interval during which the business is open;
            0 - 7 * 24 * 60.
        closing_minute (:obj:`int`): The minute's
            sequence number in a week, starting on Monday, marking the end of the time interval
            during which the business is open; 0 - 8 * 24 * 60

    Attributes:
        opening_minute (:obj:`int`): The minute's sequence number in a week, starting on Monday,
            marking the start of the time interval during which the business is open;
            0 - 7 * 24 * 60.
        closing_minute (:obj:`int`): The minute's
            sequence number in a week, starting on Monday, marking the end of the time interval
            during which the business is open; 0 - 8 * 24 * 60
    )_closing_time_opening_timeclosing_minuteopening_minuteNr   )rI   rH   r   c                   s@   t  j|d || _|| _d | _d | _| j| jf| _|   d S r   )r   r   rI   rH   rG   rF   r   r   )r   rI   rH   r   r    r"   r#   r   _  s    z%BusinessOpeningHoursInterval.__init__)minuter'   c                 C   s   |d |d d |d d fS )Ni  <   r"   )r   rJ   r"   r"   r#   _parse_minuteq  s    z*BusinessOpeningHoursInterval._parse_minute)r'   c                 C   s   | j dkr| | j| _ | j S )aW  Convenience attribute. A :obj:`tuple` parsed from :attr:`opening_minute`. It contains
        the `weekday`, `hour` and `minute` in the same ranges as :attr:`datetime.datetime.weekday`,
        :attr:`datetime.datetime.hour` and :attr:`datetime.datetime.minute`

        Returns:
            Tuple[:obj:`int`, :obj:`int`, :obj:`int`]:
        N)rG   rL   rI   r   r"   r"   r#   opening_timet  s    	
z)BusinessOpeningHoursInterval.opening_timec                 C   s   | j dkr| | j| _ | j S )aW  Convenience attribute. A :obj:`tuple` parsed from :attr:`closing_minute`. It contains
        the `weekday`, `hour` and `minute` in the same ranges as :attr:`datetime.datetime.weekday`,
        :attr:`datetime.datetime.hour` and :attr:`datetime.datetime.minute`

        Returns:
            Tuple[:obj:`int`, :obj:`int`, :obj:`int`]:
        N)rF   rL   rH   rM   r"   r"   r#   closing_time  s    	
z)BusinessOpeningHoursInterval.closing_time)r/   r0   r1   r2   r3   r5   r   r   r   r   rL   propertyrN   rO   r8   r"   r"   r    r#   rE   3  s   )rE   c                       sd   e Zd ZdZdZddeee ee	 d fddZ
edee	 ed ed  d	 fd
dZ  ZS )BusinessOpeningHoursaS  
    This object describes the opening hours of a business.

    Objects of this class are comparable in terms of equality.
    Two objects of this class are considered equal, if their
    :attr:`time_zone_name` and :attr:`opening_hours` are equal.

    .. versionadded:: 21.1

    Args:
        time_zone_name (:obj:`str`): Unique name of the time zone for which the opening
            hours are defined.
        opening_hours (Sequence[:class:`telegram.BusinessOpeningHoursInterval`]): List of
            time intervals describing business opening hours.

    Attributes:
        time_zone_name (:obj:`str`): Unique name of the time zone for which the opening
            hours are defined.
        opening_hours (Sequence[:class:`telegram.BusinessOpeningHoursInterval`]): List of
            time intervals describing business opening hours.
    )opening_hourstime_zone_nameNr   )rS   rR   r   c                   s8   t  j|d || _t|| _| j| jf| _|   d S r   )r   r   rS   r   rR   r   r   )r   rS   rR   r   r    r"   r#   r     s    zBusinessOpeningHours.__init__r   r$   c                    s8   |  |}|sdS t|d||d< t j||dS )r(   NrR   r*   )r+   rE   Zde_listr,   r   r-   r=   r    r"   r#   r-     s    
 zBusinessOpeningHours.de_json)N)r/   r0   r1   r2   r3   r4   r   rE   r   r   r   r7   r-   r8   r"   r"   r    r#   rQ     s     rQ   N) r2   r   typingr   r   r   r   Ztelegram._chatr   Ztelegram._files.locationr   Ztelegram._files.stickerr	   Ztelegram._telegramobjectr
   Ztelegram._userr   Ztelegram._utils.argumentparsingr   Ztelegram._utils.datetimer   r   Ztelegram._utils.typesr   Ztelegramr   r   r9   r>   rB   rE   rQ   r"   r"   r"   r#   <module>   s$   YC;6\