U
    !jV                     @  s~   d Z ddlmZ ddlZddlmZ ddlmZ e  eddG dd	 d	ZeddG d
d dZ	ddddZ
e
 ZdS )ug   Конфигурация сервиса: настройки и список порталов из .env.    )annotationsN)	dataclass)load_dotenvT)frozenc                   @  s\   e Zd ZU ded< ded< ded< eddddZedddd	Zeddd
dZdS )PortalConfigstrdomain	client_idclient_secretreturnc                 C  s   | j  ddddS )uK   Префикс переменных окружения для домена.._-)r   upperreplaceself r   -/var/www/spa-bitrix.ru/bitrix_asist/config.pykey   s    zPortalConfig.keyc                 C  s   d| j  dS )Nhttps://z/restr   r   r   r   r   	rest_base   s    zPortalConfig.rest_basec                 C  s   d| j  dS )Nr   z/oauth/authorize/r   r   r   r   r   authorize_url   s    zPortalConfig.authorize_urlN)__name__
__module____qualname____annotations__propertyr   r   r   r   r   r   r   r      s   
r   c                   @  s|   e Zd ZU ded< ded< ded< ded< ded< ded< d	ed
< eddddZeddddZeddddZdS )Settingsr   anthropic_api_keydraft_modelintdraft_max_tokenspublic_base_urlpoll_intervalcontext_limitzdict[str, PortalConfig]portalsr   c                 C  s   dS )Nz&https://oauth.bitrix.info/oauth/token/r   r   r   r   r   oauth_token_url*   s    zSettings.oauth_token_urlc                 C  s   | j d dS )N/z/oauth/callbackr%   rstripr   r   r   r   redirect_uri/   s    zSettings.redirect_uric                 C  s   | j d dS )Nr*   z/bot/eventsr+   r   r   r   r   event_handler_url3   s    zSettings.event_handler_urlN)r   r   r   r   r   r)   r-   r.   r   r   r   r   r        s   
r    r   c                    s4  g  ddd fdd} | d}| d}t dd }|sF d d	d
 |dD }i }|D ]J}| dddd}| | d}| | d}	t|||	d||< qb rd}
|rddd |D }d| }
t	dd  |
 d t
|t ddtt dd|tt ddtt dd |d!S )"u   Собирает конфиг и проверяет ВСЕ обязательные переменные сразу,
    выдавая единый список недостающих с точными именами.r   )namer   c                   s"   t | d }|s |  |S )N )osgetenvstripappend)r/   valZmissingr   r   need=   s    
zload_settings.<locals>.needZANTHROPIC_API_KEYZPUBLIC_BASE_URLZBITRIX_PORTALSr0   c                 S  s   g | ]}|  r|  qS r   )r3   .0dr   r   r   
<listcomp>I   s      z!load_settings.<locals>.<listcomp>,r   r   r   Z
_CLIENT_IDZ_CLIENT_SECRET)r   r	   r
   
c                 s  s.   | ]&}d |  dddd dV  qdS )z    r   r   r   z_CLIENT_ID / _CLIENT_SECRETN)r   r   r8   r   r   r   	<genexpr>U   s   z load_settings.<locals>.<genexpr>u   

Для порталов из BITRIX_PORTALS ожидаются переменные (имя = домен в ВЕРХНЕМ регистре, точки/дефисы -> '_'):
uX   Не заданы обязательные переменные окружения:
  - z
  - u3   

Заполни их в .env (см. .env.example).ZDRAFT_MODELzclaude-sonnet-4-6ZDRAFT_MAX_TOKENSZ600ZPOLL_INTERVAL_SECONDSZ20ZCONTEXT_MESSAGE_LIMITZ12)r!   r"   r$   r%   r&   r'   r(   )r1   r2   r3   r4   splitr   r   r   joinRuntimeErrorr    r#   )r7   Zapi_keyZpublic_baseZraw_portalsZdomainsr(   r   r   ZcidZcsecZhintZexpectedr   r6   r   load_settings8   sP    


rB   )__doc__Z
__future__r   r1   Zdataclassesr   Zdotenvr   r   r    rB   settingsr   r   r   r   <module>   s   7