o
    l>jg                     @   sP   d Z ddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 G dd deZdS )	zHide my email service.    )Any	GeneratorOptional)Response)BaseService)PyiCloudSessionc                       s$  e Zd ZdZdededeeef ddf fddZde	e fd	d
Z
d dededeeef fddZdefddZdeeedf fddZdedeeef fddZ	d!dedede	e deeef fddZdedeeef fddZdedeeef fddZdedeeef fddZ  ZS )"HideMyEmailServiceal  
    The 'Hide My Email' iCloud service connects to iCloud and manages email aliases.

    This service allows users to:
    - Generate new email aliases
    - Reserve specific aliases
    - List all existing aliases
    - Get alias details by ID
    - Update alias metadata (label, note)
    - Delete aliases
    - Deactivate aliases
    - Reactivate aliases
    service_rootsessionparamsreturnNc                    s   t  ||| | d| _| j d| _| j d| _| j d| _| j d| _| j d| _| j d| _| d| _	| j	 d	| _
| j	 d
| _d S )Nz/v1/hmez	/generatez/reservez/updateMetaDataz/deletez/deactivatez/reactivatez/v2/hmez/listz/get)super__init___v1_endpoint_generate_endpoint_reserve_endpoint_update_metadata_endpoint_delete_endpoint_deactivate_endpoint_reactivate_endpoint_v2_endpoint_list_endpoint_get_endpoint)selfr	   r
   r   	__class__ R/home/thesage/.local/lib/python3.10/site-packages/pyicloud/services/hidemyemail.pyr      s   zHideMyEmailService.__init__c                 C   s8   | j j| j| jd}| }|d}|r|dS dS )z
        Generate a new email alias.

        Returns:
            The generated email address string or None if generation failed.
        r   resulthmeN)r
   postr   r   jsongetr   reqresponser   r   r   r   generate-   s   

zHideMyEmailService.generate	Generatedemaillabelc                 C   s2   | j j| j| j|||dd}| }|di S )a0  
        Reserve an alias for emails.

        Args:
            email: The email alias to reserve.
            label: A label for the email alias.
            note: An optional note for the email alias.

        Returns:
            The API's result containing details about the reserved alias.
        )r    r*   noter   r"   r   )r
   r!   r   r   r"   r#   )r   r)   r*   r+   r%   r&   r   r   r   reserve;   s   	zHideMyEmailService.reservec                 C   s>   | j j| j| jd}| }|d}|rt|dg S dS )z*
        Get the number of emails
        r   r   	hmeEmailsr   )r
   r#   r   r   r"   lenr$   r   r   r   __len__S   s   
zHideMyEmailService.__len__c                 c   sF    | j j| j| jd}| }|d}|r!|dg E dH  dS dS )z1
        Iterate over the list of emails
        r   r   r.   N)r
   r#   r   r   r"   r$   r   r   r   __iter__^   s   
zHideMyEmailService.__iter__anonymous_idc                 C   .   | j j| j| jd|id}| }|di S )z
        Get alias email details by anonymous_id.

        Args:
            anonymous_id: The unique identifier for the alias.

        Returns:
            A dictionary containing details about the alias.
        anonymousIdr,   r   )r
   r!   r   r   r"   r#   r   r2   r%   r&   r   r   r   __getitem__h      
zHideMyEmailService.__getitem__r+   c                 C   sD   ||d}|dur||d< | j j| j| j|d}| }|di S )a4  
        Update metadata for an alias email.

        Args:
            anonymous_id: The unique identifier for the alias.
            label: The new label for the alias.
            note: The new note for the alias (optional).

        Returns:
            A dictionary containing the API response.
        )r4   r*   Nr+   r,   r   )r
   r!   r   r   r"   r#   )r   r2   r*   r+   payloadr%   r&   r   r   r   update_metadataz   s   z"HideMyEmailService.update_metadatac                 C   r3   )z
        Delete an alias email.

        Args:
            anonymous_id: The unique identifier for the alias to delete.

        Returns:
            A dictionary containing the API response.
        r4   r,   r   )r
   r!   r   r   r"   r#   r5   r   r   r   delete   r7   zHideMyEmailService.deletec                 C   r3   )am  
        Deactivate an alias email.

        Deactivating an alias means emails sent to it will no longer be forwarded,
        but the alias remains in your list and can be reactivated later.

        Args:
            anonymous_id: The unique identifier for the alias to deactivate.

        Returns:
            A dictionary containing the API response.
        r4   r,   r   )r
   r!   r   r   r"   r#   r5   r   r   r   
deactivate      zHideMyEmailService.deactivatec                 C   r3   )aT  
        Reactivate a previously deactivated alias email.

        Reactivating an alias means emails sent to it will be forwarded again
        to your primary inbox.

        Args:
            anonymous_id: The unique identifier for the alias to reactivate.

        Returns:
            A dictionary containing the API response.
        r4   r,   r   )r
   r!   r   r   r"   r#   r5   r   r   r   
reactivate   r<   zHideMyEmailService.reactivate)r(   )N)__name__
__module____qualname____doc__strr   dictr   r   r   r'   r-   intr0   r   r1   r6   r9   r:   r;   r=   __classcell__r   r   r   r   r      s:    
 


"r   N)rA   typingr   r   r   requestsr   pyicloud.services.baser   pyicloud.sessionr   r   r   r   r   r   <module>   s    