a
    j                     @   s   d Z ddlZddlZddlZddl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 dd	lmZ G d
d deZdS )u  
UIManager — поток управления пользовательским интерфейсом аквариумного контроллера.
			Работает независимо от DevicesManager и RulesHandler.
			Обменивается данными через ОБЩУЮ TaskQueue (фильтрация по target).

Архитектурные принципы:
	- используем одну единую, для всех потоков, очередь
	- приоритеты: HIGH (аварии) → NORMAL (UI) → LOW (фон)
	- использование DeviceLoader для загрузки устройств, TaskExecutor для их выполнения

Назначение:
	1. Опрос аналогового джойстика (оси X/Y через ADS1115 + кнопка SW через GPIO23)
	2. Отрисовка информации на дисплее ST7735 (SPI)
	3. Обработка команд от правил напрямую из TaskQueue (алерты, уведомления)
    N)Thread)OptionalAnyCallable)	TaskQueue)logger)config)DeviceLoader)TaskExecutorc                       sN   e Zd Zedd fddZdd Zeeedddd	Z	dd
ddZ
  ZS )	UIManagerN)queuereturnc                    sR   t  jdd t | _|| _t | _t | _	t
 | _t | _d| _t | _d S )NT)daemonF)super__init__	threadingEvent
stop_eventr   r	   loaderdictdevicessetavailable_devicesr
   task_executorinit_successinit_complete_event)selfr   	__class__ */var/aqua_controller/workers/ui_manager.pyr   &   s    
zUIManager.__init__c                 C   s   | j   | j  d S N)r   stopr   r   )r   r   r   r    r"   4   s    
zUIManager.stop)device_nameresulttaskr   c                 C   s   d S r!   r   )r   r#   r$   r%   r   r   r    _on_get_result@   s    zUIManager._on_get_result)r   c              
   C   s  t d zzBtd}|d urF| j| | jj| _| jj| _n
t d |r\t	|nd}t	| j}|dkrt 
d d| _n.||k rt 
d| d| d	 d| _nd
| _| jst d W W t d d S | j  t d | j sP| jjdd}|std qd|vr*td q| jj|| j| j| jd td qW nN ty } z4t d|  t dtjdd  W Y d }~n
d }~0 0 W t d nt d 0 d S )Nu   Поток запущен.
ui_devicesuL   Секция 'ui_devices' отсутствует в конфигурацииr   u`   Критическая ошибка. Cписок доступных устройств пуст.FuF   Критическая ошибка. Инициализировано u    из u    устройств.Tug   Поток UIManager завершает работу из-за ошибок инициализации.u    Поток остановлен.uC   Поток UIManager успешно инициализирован.)streamg{Gz?actionsgMbP?)r%   r   r   on_get_resultu<   Ошибка функциональности потока: u%   Трассировка ошибки:    )limit)r   infor   get_sectionr   loadr   r   warninglencriticalr   errorr   r   r   is_setr   get_tasktimesleepr   execute_taskr&   	Exceptiondebug	traceback
format_exc)r   Zconfig_ui_devices_expected_devices_count_loaded_devices_count	self_tasker   r   r    runH   sV    






"





0zUIManager.run)__name__
__module____qualname__r   r   r"   strr   r   r&   rA   __classcell__r   r   r   r    r   "   s   r   )__doc__r;   r6   r   r   typingr   r   r   core.task_queuer   core.loggerr   core.config_handlerr   core.device_loaderr	   core.task_executorr
   r   r   r   r   r    <module>   s   