
    |e                         d dl mZ d dlmc mZ d dlZd dlm	Z	m
Z
m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 dd	lmZmZmZ dd
lmZ 	 	 	 ddedededededefdZ G d de
e          Z G d de          Z dS )    )	lru_cacheN)ConfigEntry
ConfigFlowOptionsFlow)	CONF_MODECONF_PASSWORDCONF_USERNAME)callback)FlowHandler)async_get_clientsession   )
CONF_DEBUG
CONF_MODESDOMAIN)XRegistryCloudflowstep_idschemadefaultstemplateerrorc                     |r2|D ]/}|j         |v r$t          j        ||j                            |_        0|r	d|v rddi}n|rd|i}|                     |t          j        |          ||          S )zSuppport:
    - overwrite schema defaults from dict (user_input or entry.options)
    - set base error code (translations > config > error > code)
    - set custom error via placeholders ("template": "{error}")
    r   baser   )r   data_schemadescription_placeholderserrors)r   voldefault_factorydefaultasync_show_formSchema)r   r   r   r   r   r   keys          //config/custom_components/sonoff/config_flow.pyformr$      s      H 	H 	HCzX%%!1(3:2FGG  Gx''$	  Jv&&!)	         c                       e Zd Ze ed          d                         Zd
dZddZd
dZe	e
defd	                        ZdS )SonoffLANFlowHandlerr   )maxsizec                 H    t          | j                  }t          |          S N)r   hassr   )selfsessions     r#   cloudzSonoffLANFlowHandler.cloud/   s!     *$)44g&&&r%   Nc                 <   K   |                      |           d {V S r*   async_step_userr,   
user_inputs     r#   async_step_importz&SonoffLANFlowHandler.async_step_import5   s,      ))*555555555r%   c                   K   t          j        t                    t          t          j        t
                    t          i}|r|                    t                    }|                    t
                    }	 |                     |           d {V }|rk|dk    re| j        	                    |j
        t                   |j
        t
                   d           d {V  t          | d||dd| j        j        z   i          S |r#|r!| j        	                    ||           d {V  |r=| j        j                            ||| j                   |                     d	          S |                     ||
          S # t&          $ r-}t          | d||dt          |          i          cY d }~S d }~ww xY wt          | d|          S )Ntokenr   userr   zToken: )r   )data	unique_idreauth_successful)reasontitler8   )r   Requiredr	   strOptionalr   getasync_set_unique_idr.   loginr8   r$   r6   r+   config_entriesasync_update_entryr9   async_abortasync_create_entry	Exception)r,   r8   r   r   usernamepasswordentryes           r#   r1   z$SonoffLANFlowHandler.async_step_user8   s     ,}--sCL4O4OQTUxx..Hxx..HT"66x@@@@@@@@ X00***
=15:m3La          ")9tz7G+G!H     ? ?***8X>>>>>>>>> HI,??DDN @   
  ++3F+GGG..XD.III T T TD&&$'3q66ARSSSSSSSSST D&&)))s,   9BE< A#E< %E< <
F3"F.(F3.F3c                 :   K   |                                   d {V S r*   r0   r2   s     r#   async_step_reauthz&SonoffLANFlowHandler.async_step_reauth`   s*      ))+++++++++r%   rK   c                      t          |           S r*   )OptionsFlowHandlerrK   s    r#   async_get_options_flowz+SonoffLANFlowHandler.async_get_options_flowc   s     "%(((r%   r*   )NN)__name__
__module____qualname__propertyr   r.   r4   r1   rN   staticmethodr
   r   rR    r%   r#   r'   r'   .   s        Yq' '  X'6 6 6 6&* &* &* &*P, , , , )k ) ) ) X \) ) )r%   r'   )domainc                   (    e Zd ZdefdZddefdZdS )rP   rK   c                     || _         d S r*   rQ   )r,   rK   s     r#   __init__zOptionsFlowHandler.__init__k   s    


r%   Nr8   c                   K   ||                      d|          S i }| j        j                            t                    }| j        j                            t
                    }|rf|rd	 t          | j                  }t          |          }|	                    ||d           d {V  |
                                 d {V }n#  Y nxY w| j        j                            dg           D ]}||vr|||<   t          | dt          j        t          d          t          j        t"                    t          j        t$          d	          t&          t          j        d          t)          j        |          i| j        j                  S )
N r<   r   )apphomesinitauto)r   F)rG   rK   r8   rA   r	   r   r   r+   r   rC   	get_homesoptionsr$   r   r@   r   Inr   r   boolcvmulti_select)r,   r8   r`   rI   rJ   r-   r.   homes           r#   async_step_initz"OptionsFlowHandler.async_step_initn   s     **$*???:?&&}55:?&&}55 	 	1$)<<&w//kk(H!k<<<<<<<<<#oo////////J&**7B77 	# 	#D5  "dY777
9K9KZ777W%%ru'='=
 J	
 	
 		
s   +AC Cr*   )rS   rT   rU   r   r\   dictrj   rX   r%   r#   rP   rP   j   sO        k    
 
$ 
 
 
 
 
 
r%   rP   )NNN)!	functoolsr   'homeassistant.helpers.config_validationhelpersconfig_validationrg   
voluptuousr   homeassistant.config_entriesr   r   r   homeassistant.constr   r   r	   homeassistant.corer
   homeassistant.data_entry_flowr   $homeassistant.helpers.aiohttp_clientr   
core.constr   r   r   core.ewelinkr   r?   rk   r$   r'   rP   rX   r%   r#   <module>rx      s         4 4 4 4 4 4 4 4 4     M M M M M M M M M M G G G G G G G G G G ' ' ' ' ' ' 5 5 5 5 5 5 H H H H H H 6 6 6 6 6 6 6 6 6 6 ( ( ( ( ( (  
  	
     >8) 8) 8) 8) 8):f 8) 8) 8) 8)x#
 #
 #
 #
 #
 #
 #
 #
 #
 #
r%   