o
    "h>                     @   s   d 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 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G dd deZG dd deZG dd de	ZdS )z8This module contains objects that represent story areas.    )FinalOptional)	constants)ReactionType)TelegramObject)enum)JSONDictc                       sP   e Zd ZdZdZdddedededed	ed
edee ddf fddZ  Z	S )StoryAreaPositiona|  Describes the position of a clickable area within a story.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if all of their attributes are equal.

    .. versionadded:: 22.1

    Args:
        x_percentage (:obj:`float`): The abscissa of the area's center, as a percentage of the
            media width.
        y_percentage (:obj:`float`): The ordinate of the area's center, as a percentage of the
            media height.
        width_percentage (:obj:`float`): The width of the area's rectangle, as a percentage of the
            media width.
        height_percentage (:obj:`float`): The height of the area's rectangle, as a percentage of
            the media height.
        rotation_angle (:obj:`float`): The clockwise rotation angle of the rectangle, in degrees;
            0-:tg-const:`~telegram.constants.StoryAreaPositionLimit.MAX_ROTATION_ANGLE`.
        corner_radius_percentage (:obj:`float`): The radius of the rectangle corner rounding, as a
            percentage of the media width.

    Attributes:
        x_percentage (:obj:`float`): The abscissa of the area's center, as a percentage of the
            media width.
        y_percentage (:obj:`float`): The ordinate of the area's center, as a percentage of the
            media height.
        width_percentage (:obj:`float`): The width of the area's rectangle, as a percentage of the
            media width.
        height_percentage (:obj:`float`): The height of the area's rectangle, as a percentage of
            the media height.
        rotation_angle (:obj:`float`): The clockwise rotation angle of the rectangle, in degrees;
            0-:tg-const:`~telegram.constants.StoryAreaPositionLimit.MAX_ROTATION_ANGLE`.
        corner_radius_percentage (:obj:`float`): The radius of the rectangle corner rounding, as a
            percentage of the media width.

    )corner_radius_percentageheight_percentagerotation_anglewidth_percentagex_percentagey_percentageN
api_kwargsr   r   r   r   r   r
   r   returnc                   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__ F/var/www/html/venv/lib/python3.10/site-packages/telegram/_storyarea.pyr   M   s   zStoryAreaPosition.__init__)
__name__
__module____qualname____doc__	__slots__floatr   r   r   __classcell__r   r   r   r   r	      s*    %	
r	   c                       s\   e Zd ZdZdZ			ddddedee dee dee d	ee d
df fddZ  Z	S )LocationAddressa  Describes the physical address of a location.

    Objects of this class are comparable in terms of equality. Two objects of this class are
    considered equal, if their :attr:`country_code`, :attr:`state`, :attr:`city` and :attr:`street`
    are equal.

    .. versionadded:: 22.1

    Args:
        country_code (:obj:`str`): The two-letter ``ISO 3166-1 alpha-2`` country code of the
            country where the location is located.
        state (:obj:`str`, optional): State of the location.
        city (:obj:`str`, optional): City of the location.
        street (:obj:`str`, optional): Street address of the location.

    Attributes:
        country_code (:obj:`str`): The two-letter ``ISO 3166-1 alpha-2`` country code of the
            country where the location is located.
        state (:obj:`str`): Optional. State of the location.
        city (:obj:`str`): Optional. City of the location.
        street (:obj:`str`): Optional. Street address of the location.

    )citycountry_codestatestreetNr   r&   r'   r%   r(   r   r   c                   sH   t  j|d || _|| _|| _|| _| j| j| j| jf| _|   d S r   )r   r   r&   r'   r%   r(   r   r   )r   r&   r'   r%   r(   r   r   r   r   r      s   	zLocationAddress.__init__)NNN
r   r   r   r    r!   strr   r   r   r#   r   r   r   r   r$   k   s*    r$   c                       s   e Zd ZU dZdZejjZee	 e
d< 	 ejjZee	 e
d< 	 ejjZee	 e
d< 	 ejjZee	 e
d< 	 ejjZee	 e
d< 	 dd	d
e	dee ddf fddZ  ZS )StoryAreaTypeah  Describes the type of a clickable area on a story. Currently, it can be one of:

    * :class:`telegram.StoryAreaTypeLocation`
    * :class:`telegram.StoryAreaTypeSuggestedReaction`
    * :class:`telegram.StoryAreaTypeLink`
    * :class:`telegram.StoryAreaTypeWeather`
    * :class:`telegram.StoryAreaTypeUniqueGift`

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

    .. versionadded:: 22.1

    Args:
        type (:obj:`str`): Type of the area.

    Attributes:
        type (:obj:`str`): Type of the area.

    )typeLOCATIONSUGGESTED_REACTIONLINKWEATHERUNIQUE_GIFTNr   r,   r   r   c                   s6   t  j|d ttj||| _| jf| _|   d S r   )	r   r   r   
get_memberr   StoryAreaTypeTyper,   r   r   )r   r,   r   r   r   r   r      s   
zStoryAreaType.__init__)r   r   r   r    r!   r   r3   r-   r   r*   __annotations__r.   r/   r0   r1   r   r   r   r#   r   r   r   r   r+      s*   
 r+   c                       sL   e Zd ZdZdZ	ddddededee dee d	df
 fd
dZ	  Z
S )StoryAreaTypeLocationa  Describes a story area pointing to a location. Currently, a story can have up to
    :tg-const:`~telegram.constants.StoryAreaTypeLimit.MAX_LOCATION_AREAS` location areas.

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

    .. versionadded:: 22.1

    Args:
        latitude (:obj:`float`): Location latitude in degrees.
        longitude (:obj:`float`): Location longitude in degrees.
        address (:class:`telegram.LocationAddress`, optional): Address of the location.

    Attributes:
        type (:obj:`str`): Type of the area, always :attr:`~telegram.StoryAreaType.LOCATION`.
        latitude (:obj:`float`): Location latitude in degrees.
        longitude (:obj:`float`): Location longitude in degrees.
        address (:class:`telegram.LocationAddress`): Optional. Address of the location.

    )addresslatitude	longitudeNr   r7   r8   r6   r   r   c                   sd   t  jtj|d |   || _|| _|| _| j| j| jf| _	W d    d S 1 s+w   Y  d S N)r,   r   )
r   r   r+   r-   	_unfrozenr7   r8   r6   r,   r   )r   r7   r8   r6   r   r   r   r   r      s   
"zStoryAreaTypeLocation.__init__)N)r   r   r   r    r!   r"   r   r$   r   r   r#   r   r   r   r   r5      s"    r5   c                       sR   e Zd ZdZdZ		ddddedee dee dee d	df
 fd
dZ	  Z
S )StoryAreaTypeSuggestedReactiona  
    Describes a story area pointing to a suggested reaction. Currently, a story can have up to
    :tg-const:`~telegram.constants.StoryAreaTypeLimit.MAX_SUGGESTED_REACTION_AREAS`
    suggested reaction areas.

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

    .. versionadded:: 22.1

    Args:
        reaction_type (:class:`ReactionType`): Type of the reaction.
        is_dark (:obj:`bool`, optional): Pass :obj:`True` if the reaction area has a dark
            background.
        is_flipped (:obj:`bool`, optional): Pass :obj:`True` if reaction area corner is flipped.

    Attributes:
        type (:obj:`str`): Type of the area, always
            :tg-const:`~telegram.StoryAreaType.SUGGESTED_REACTION`.
        reaction_type (:class:`ReactionType`): Type of the reaction.
        is_dark (:obj:`bool`): Optional. Pass :obj:`True` if the reaction area has a dark
            background.
        is_flipped (:obj:`bool`): Optional. Pass :obj:`True` if reaction area corner is flipped.

    )is_dark
is_flippedreaction_typeNr   r>   r<   r=   r   r   c                   h   t  jtj|d |   || _|| _|| _| j| j| j| jf| _	W d    d S 1 s-w   Y  d S r9   )
r   r   r+   r.   r:   r>   r<   r=   r,   r   )r   r>   r<   r=   r   r   r   r   r        
"z'StoryAreaTypeSuggestedReaction.__init__)NN)r   r   r   r    r!   r   r   boolr   r   r#   r   r   r   r   r;      s$    r;   c                       <   e Zd ZdZdZdddedee ddf fdd	Z  Z	S )
StoryAreaTypeLinka  Describes a story area pointing to an ``HTTP`` or ``tg://`` link. Currently, a story can
    have up to :tg-const:`~telegram.constants.StoryAreaTypeLimit.MAX_LINK_AREAS` link areas.

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

    .. versionadded:: 22.1

    Args:
        url (:obj:`str`): ``HTTP`` or ``tg://`` URL to be opened when the area is clicked.

    Attributes:
        type (:obj:`str`): Type of the area, always :attr:`~telegram.StoryAreaType.LINK`.
        url (:obj:`str`): ``HTTP`` or ``tg://`` URL to be opened when the area is clicked.

    )urlNr   rD   r   r   c                   T   t  jtj|d |   || _| j| jf| _W d    d S 1 s#w   Y  d S r9   )r   r   r+   r/   r:   rD   r,   r   )r   rD   r   r   r   r   r   7  
   
"zStoryAreaTypeLink.__init__r)   r   r   r   r   rC   #  s    rC   c                       sD   e Zd ZdZdZdddedededee	 d	df
 fd
dZ
  ZS )StoryAreaTypeWeathera  
    Describes a story area containing weather information. Currently, a story can have up to
    :tg-const:`~telegram.constants.StoryAreaTypeLimit.MAX_WEATHER_AREAS` weather areas.

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

    .. versionadded:: 22.1

    Args:
        temperature (:obj:`float`): Temperature, in degree Celsius.
        emoji (:obj:`str`): Emoji representing the weather.
        background_color (:obj:`int`): A color of the area background in the ``ARGB`` format.

    Attributes:
        type (:obj:`str`): Type of the area, always
            :tg-const:`~telegram.StoryAreaType.WEATHER`.
        temperature (:obj:`float`): Temperature, in degree Celsius.
        emoji (:obj:`str`): Emoji representing the weather.
        background_color (:obj:`int`): A color of the area background in the ``ARGB`` format.

    )background_coloremojitemperatureNr   rJ   rI   rH   r   r   c                   r?   r9   )
r   r   r+   r0   r:   rJ   rI   rH   r,   r   )r   rJ   rI   rH   r   r   r   r   r   `  r@   zStoryAreaTypeWeather.__init__)r   r   r   r    r!   r"   r*   intr   r   r   r#   r   r   r   r   rG   E  s    rG   c                       rB   )
StoryAreaTypeUniqueGiftad  
    Describes a story area pointing to a unique gift. Currently, a story can have at most
    :tg-const:`~telegram.constants.StoryAreaTypeLimit.MAX_UNIQUE_GIFT_AREAS` unique gift area.

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

    .. versionadded:: 22.1

    Args:
        name (:obj:`str`): Unique name of the gift.

    Attributes:
        type (:obj:`str`): Type of the area, always
            :tg-const:`~telegram.StoryAreaType.UNIQUE_GIFT`.
        name (:obj:`str`): Unique name of the gift.

    )nameNr   rM   r   r   c                   rE   r9   )r   r   r+   r1   r:   rM   r,   r   )r   rM   r   r   r   r   r     rF   z StoryAreaTypeUniqueGift.__init__r)   r   r   r   r   rL   r  s    rL   c                	       s@   e Zd ZdZdZdddededee ddf fd	d
Z	  Z
S )	StoryAreaa4  Describes a clickable area on a story media.

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

    .. versionadded:: 22.1

    Args:
        position (:class:`telegram.StoryAreaPosition`): Position of the area.
        type (:class:`telegram.StoryAreaType`): Type of the area.

    Attributes:
        position (:class:`telegram.StoryAreaPosition`): Position of the area.
        type (:class:`telegram.StoryAreaType`): Type of the area.

    )positionr,   Nr   rO   r,   r   r   c                   s4   t  j|d || _|| _| j| jf| _|   d S r   )r   r   rO   r,   r   r   )r   rO   r,   r   r   r   r   r     s
   zStoryArea.__init__)r   r   r   r    r!   r	   r+   r   r   r   r#   r   r   r   r   rN     s    rN   N)r    typingr   r   telegramr   telegram._reactionr   telegram._telegramobjectr   telegram._utilsr   telegram._utils.typesr   r	   r$   r+   r5   r;   rC   rG   rL   rN   r   r   r   r   <module>   s    M.0*0"-$