o
    i                     @   s  d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZ edd	Ze eZd
ZdZdZdZ dZ!dZ"dZ#dZ$G dd deZ%de&de&fddZ'de&de&fddZ(de&de&fddZ)de&de&fddZ*de&de&fddZ+de&de&fd d!Z,de&defd"d#Z-de.e/e0e&f  fd$d%Z1d&e&de.e/e0e&f  fd'd(Z2d)e0de&dB fd*d+Z3d)e0de&dB fd,d-Z4d)e0de/e&e5f dB fd.d/Z6d)e0de7fd0d1Z8d)e0de.e& fd2d3Z9de.e/e&e&f  fd4d5Z:d6e0d7e0de5dB fd8d9Z;d)e0de.e/e0e&f  fd:d;Z<de&d<e.e/e0e&f  defd=d>Z=de&d?e.e/e0e&f  d)e0defd@dAZ>d6e0de?dB fdBdCZ@d6e0d)e0de.e/e&e5e&e0f  fdDdEZAde&dFe.e/e&e5e&e0f  d6e0d)e0def
dGdHZBde&dIe.e& d6e0d)e0d7e0dJe&defdKdLZCde&d6e0d)e0d7e0dJe&defdMdNZDde&d6e0d)e0d7e0dJe&dOe&dPe0defdQdRZEdSe&de/e7e&dB f fdTdUZFeGejHdVkdWedXefdYdZZIeJe%jKd[e
dXefd\d]ZLeGejHMedWefd^d_ZNeGejHMedWefd`daZOeGejHMe dWefdbdcZPeGejHMe"dWefdddeZQeGejHMe#dWefdfdgZReGejHMe!dWefdhdiZSeGejHMdjdWedXefdkdlZTdWedXefdmdnZUdWedXefdodpZVde&de&fdqd!Z,de.e/e&e&f  fdrdsZWde&dte.e/e&e&f  dPe0defdudvZXde&defdwdxZYdWedXefdydpZVeGejHMe$dWefdzd{ZZeGejHd|kdWefd}d~Z[eGejHMe dWedXefddZ\dS )    N)RouterF)CallbackQueryInlineKeyboardMarkupInlineKeyboardButtonMessage)FSInputFile)StatesGroupState)
FSMContext)get_user_languageget_language_textset_user_languageget_user_balanceMENU_DBDATA_DBcatalog)namezmenu:button9zcity:zprod:ztag:z	district:z	delivery:zdelivery_info:zwallet:c                   @   s   e Zd Ze ZdS )CatalogStatesN)__name__
__module____qualname__r
   	wait_city r   r   C/var/www/www-root/data/www/magazinbotpanel.site/handlers/catalog.pyr      s    
r   langreturnc              
   C      d}z:t t}| }|d| f | }|  |r4|d r7t|d  r:t|d  }W |S W |S W |S W |S  t	yZ } zt
d|  d|  W Y d }~|S d }~ww )Nu   ⬅️ Назадz+SELECT button9 FROM language WHERE name = ?r   z get_button9_text error for lang=: sqlite3connectr   cursorexecutefetchoneclosestrstrip	Exceptionloggererrorr   labelconncurrower   r   r   get_button9_text   *   
 r1   c              
   C   r   )Nu   🚗 Доставкаz,SELECT button11 FROM language WHERE name = ?r   z!get_button11_text error for lang=r   r   r+   r   r   r   get_button11_text*   r2   r3   c              
   C   r   )Nu   💳 CryptoBotz,SELECT button13 FROM language WHERE name = ?r   z!get_button13_text error for lang=r   r   r+   r   r   r   get_button13_text8   r2   r4   c              
   C   r   )Nu$   💳 Банковская картаz,SELECT button14 FROM language WHERE name = ?r   z!get_button14_text error for lang=r   r   r+   r   r   r   get_button14_textF   r2   r5   c              
   C   r   )Nu'   💰 Оплатить с балансаz,SELECT button16 FROM language WHERE name = ?r   z!get_button16_text error for lang=r   r   r+   r   r   r   get_button16_textT   r2   r6   c              
   C   r   Nu   📞 Операторz,SELECT button21 FROM language WHERE name = ?r   z!get_button21_text error for lang=r   r   r+   r   r   r   get_button21_textb   r2   r8   c                 C   s   t tt| tdggdS )Ntextcallback_datainline_keyboard)r   r   r1   BACK_CB)r   r   r   r   build_back_keyboardp   s   r?   c               
   C   sv   zt t} |  }|d | }|   dd |D W S  ty: } zt	d|  g W  Y d}~S d}~ww )uA   Загружает все города из базы данныхz#SELECT city_id, city_name FROM cityc                 S   s@   g | ]}|r|d  dur|d rt |d  t|d  fqS )r   N   )intr&   r'   ).0rr   r   r   
<listcomp>}   s   @ z#load_all_cities.<locals>.<listcomp>zload_all_cities error: N)
r    r!   r   r"   r#   fetchallr%   r(   r)   r*   )r-   r.   rowsr0   r   r   r   load_all_citiesu   s   

rG   prefixc                    s@   | pd     sg S t } fdd|D }t|dd dS )u>   Находит города по префиксу (поиск) c                    s&   g | ]\}}|   r||fqS r   )lower
startswith)rB   cidr   qr   r   rD      s   & z)find_cities_by_prefix.<locals>.<listcomp>c                 S   s   | d   S Nr@   )rJ   xr   r   r   <lambda>   s    z'find_cities_by_prefix.<locals>.<lambda>key)r'   rJ   rG   sorted)rH   citiesmatchesr   rM   r   find_cities_by_prefix   s   rX   city_idc              
   C   s   z@t t}| }|d dd | D }d|v r:|d| f | }|  |r:|d r:t|d 	 W S |  W dS  t
y^ } ztd|  d	|  W Y d}~dS d}~ww )
uB   Получает язык для указанного городаzPRAGMA table_info(city)c                 S      g | ]}|d  qS r@   r   rB   colr   r   r   rD          z%get_city_language.<locals>.<listcomp>city_languagez0SELECT city_language FROM city WHERE city_id = ?r   Nz$get_city_language error for city_id=r   )r    r!   r   r"   r#   rE   r$   r%   r&   r'   r(   r)   r*   )rY   r-   r.   columnsr/   r0   r   r   r   get_city_language   s$   

ra   c              
   C   s   z*t t}| }|d| f | }|  |r(|d r(t|d  W S dW S  t	yE } zt
d|  W Y d}~dS d}~ww )u6   Получает название города по IDz,SELECT city_name FROM city WHERE city_id = ?r   Nzget_city_name error: )r    r!   r   r"   r#   r$   r%   r&   r'   r(   r)   r*   )rY   r-   r.   r/   r0   r   r   r   get_city_name   s   
$rb   c              
   C   s   z_t t}| }|d| f | }|r|d s"|  W dS t|d  	 }|d| d | }|  |r]|d r]zt
|d }| |fW W S  ty\   Y W dS w W dS  ty} } ztd|  d|  W Y d}~dS d}~ww )u6   Получает валюту города и курсz*SELECT valyuta FROM city WHERE city_id = ?r   NSELECT z FROM kurs LIMIT 1z$get_city_currency error for city_id=r   )r    r!   r   r"   r#   r$   r%   r&   r'   rJ   floatupper
ValueErrorr(   r)   r*   )rY   r-   r.   r/   currencykurs_rowexchange_rater0   r   r   r   get_city_currency   s2   
rj   c              
   C   s   z0t t}| }|d| f | }|  |r.|d r.t|d  	 }|dkW S W dS  t
yN } ztd|  d|  W Y d}~dS d}~ww )uM   Проверяет доступна ли доставка для городаz+SELECT delivery FROM city WHERE city_id = ?r   yesFz+get_city_delivery_status error for city_id=r   N)r    r!   r   r"   r#   r$   r%   r&   r'   rJ   r(   r)   r*   )rY   r-   r.   r/   delivery_statusr0   r   r   r   get_city_delivery_status   s   

rm   c              
   C   s   zGt t}| }|d | s|  g W S |d| f | }|  g }|D ]}|rD|d rDt|d 	 }|rD|
| q-|W S  tyf } ztd|  d|  g W  Y d}~S d}~ww )u@   Получает список районов для городаzn
            SELECT name FROM sqlite_master 
            WHERE type='table' AND name='city_districts'
        zQSELECT district_name FROM city_districts WHERE city_id = ? ORDER BY district_namer   z%get_city_districts error for city_id=r   Nr    r!   r   r"   r#   r$   r%   rE   r&   r'   appendr(   r)   r*   )rY   r-   r.   rF   	districtsr/   district_namer0   r   r   r   get_city_districts   s.   


rr   c               
   C      zUt t} |  }|d | s|   g W S |d | }|   g }|D ]'}|rR|d rR|d rRt|d 	 }t|d 	 }|rR|rR|
||f q+|W S  tyq } ztd|  g W  Y d}~S d}~ww )uI   Получает опции доставки из таблицы deliveryzh
            SELECT name FROM sqlite_master 
            WHERE type='table' AND name='delivery'
        z-SELECT name, text FROM delivery ORDER BY namer   r@   zget_delivery_options error: Nrn   )r-   r.   rF   optionsr/   r   r:   r0   r   r   r   get_delivery_options  0   


ru   
product_id	tag_indexc                 C   s*  zst t}| }d| }|d dd | D }||vr(|  W dS |d| d| f | }|  |rq|d rqt|d 	 }|rqd	d |
d
D }t|dkrqz
t|d }	|	W W S  typ   Y W dS w W dS  ty }
 ztd|  d| d|
  W Y d}
~
dS d}
~
ww )ue   Получает базовую цену товара (без конвертации по курсу)product_tagsPRAGMA table_info(products)c                 S   rZ   r[   r   r\   r   r   r   rD   2  r^   z*get_product_base_price.<locals>.<listcomp>Nrc   # FROM products WHERE product_id = ?r   c                 S      g | ]}|  qS r   r'   rB   pr   r   r   rD   ?  r^   ,   r@   z(get_product_base_price error product_id=z, tag_index=r   )r    r!   r   r"   r#   rE   r%   r$   r&   r'   splitlenrd   rf   r(   r)   r*   )rw   rx   r-   r.   
tag_columnr`   r/   tag_dataparts
base_pricer0   r   r   r   get_product_base_price'  s:   


r   c           	   
   C   s   zLt t}| }|d | }|  g }|D ]#}|r>|d dur>|d r>t|d }t|d 	 }|
||f qtdt| d |W S  tyh } ztd|  g W  Y d}~S d}~ww )u   
    Находит товары для указанного города
    Возвращает список кортежей: (product_id, product_name)
    zCSELECT product_id, product_name FROM products ORDER BY product_namer   Nr@   zFound z products totalzfind_products_for_city error: )r    r!   r   r"   r#   rE   r%   rA   r&   r'   ro   r)   infor   r(   r*   )	rY   r-   r.   rF   productsr/   rw   product_namer0   r   r   r   find_products_for_cityM  s(   

r   rV   c                 C   sP   g }|D ]\}}| t|t | dg q| tt| tdg t|dS )u5   Строит клавиатуру с городамиr9   r<   )ro   r   CITY_CB_PREFIXr1   r>   r   )r   rV   rF   rL   r   r   r   r   build_cities_keyboardi  s
   
r   r   c              	   C   sv   g }|D ]%\}}|}t |dkr|dd d }|t|t | d| dg q|tt| tdg t|dS )u5   Строит клавиатуру с товарами   N   z...:r9   r<   )r   ro   r   PROD_CB_PREFIXr1   r>   r   )r   r   rY   rF   rw   r   button_textr   r   r   build_products_keyboardq  s   
r   c              
   C   s   zPt t}| }|d| f | }|  |sW dS t|d |d r/t|d 	 nd|d r<t|d 	 nd|d rLt|d 	 d	W S dd	W S  t
yn } ztd
|  d|  W Y d}~dS d}~ww )uH   Получает детальную информацию о товареz
        SELECT product_id, product_name, product_description, product_image 
        FROM products WHERE product_id = ?
        Nr   r@      Без названияr   rI      )rw   r   product_descriptionproduct_imagezget_product_details error id=r   )r    r!   r   r"   r#   r$   r%   rA   r&   r'   r(   r)   r*   )rw   r-   r.   r/   r0   r   r   r   get_product_details  s,   

r   c                 C   s  g }zt t}| }t|}|s|W S |\}}|d dd | D }g }	tddD ]}
d|
 }||v r@|	||
f q.|	j	dd d	 |	D ]V\}}|d
| d| f |
 }|r|d rt|d  }|rdd |dD }t|dkr|d }zt|d }|| }|||||f W qK ty   Y qKw qK|  |W S  ty } ztd|  d| d|  g W  Y d}~S d}~ww )uS   Получает теги товара с ценами в валюте городаrz   c                 S   rZ   r[   r   r\   r   r   r   rD     r^   z$get_product_tags.<locals>.<listcomp>r@   3   ry   c                 S   s   | d S rO   r   rP   r   r   r   rR     s    z"get_product_tags.<locals>.<lambda>rS   rc   r{   r   c                 S   r|   r   r}   r~   r   r   r   rD     r^   r   r   z"get_product_tags error product_id=z
, city_id=r   N)r    r!   r   r"   rj   r#   rE   rangero   sortr$   r&   r'   r   r   rd   rf   r%   r(   r)   r*   )rw   rY   tagsr-   r.   currency_inforg   ri   r`   tag_columnsicol_nametag_colrx   r/   r   r   tag_namer   final_pricer0   r   r   r   get_product_tags  sR   


r   r   c                 C   s   g }|D ]5\}}}}|  rt| }	n|d}	| d|	 d| }
|t|
t | d| d| d| dg q|tt| tdg t|dS )u>   Строит клавиатуру с тегами товараz.2fz -  r   r9   r<   )
is_integerrA   ro   r   TAG_CB_PREFIXr1   r>   r   )r   r   rw   rY   rF   r   pricerg   rx   	price_strr   r   r   r   build_product_tags_keyboard  s   
r   rp   r   c                 C   s   g }t |}|r$t| }|t|t | d| d| d| d	dg |D ]}	|t|	t | d| d| d| d|	 
dg q&t | d| }
|tt| |
dg t|dS )uB   Строит клавиатуру с районами городаr   	:deliveryr9   r<   )	rm   r3   ro   r   DELIVERY_CB_PREFIXDISTRICT_CB_PREFIXr   r1   r   )r   rp   rw   rY   rx   r   rF   delivery_availablebutton11_textdistrictback_to_tags_cbr   r   r   build_districts_keyboard  s    
"
r   c           
      C   s   g }t  }|D ]\}}|t|t | d| d| d| d| 
dg qt | d| d| d| }	|tt| |	dg t|dS )uD   Строит клавиатуру с опциями доставкиr   r9   r<   )ru   ro   r   DELIVERY_INFO_CB_PREFIXr   r1   r   )
r   rw   rY   rx   r   rF   delivery_optionsoption_nameoption_textback_to_districts_cbr   r   r   build_delivery_info_keyboard  s   "
r   r   user_idc                 C   sN  g }t ||}t| }	|t|	d| d| d| d| d| 
dg t| }
|t|
d| d| d| d| d| 
dg |durjt|}||krjt| }|t|d| d| d| d| d| 
dg t| }|t|d| d| d| d| d| 
dg t | d| d| d| }|tt	| |dg t
|dS )	u@   Строит клавиатуру с опциями оплатыzpayment:cryptobot:r   r9   zpayment:card:Nzpayment:balance:zpayment:operator:r<   )r   r4   ro   r   r5   r   r6   r8   r   r1   r   )r   rw   rY   rx   r   r   r   rF   r   button13_textbutton14_textuser_balancebutton16_textbutton21_textr   r   r   r   build_payment_keyboard  s8   
 
 
 
 

r   raw_pathc                 C   s   | sdS |   }| drd|fS |d| d| d| d| d| g}|D ]}tj|}tj|rFtj|rFd	|f  S q,dS )
uW   Определяет путь к изображению (локальный или URL))FN)zhttp://zhttps://Tz./z../zupload/z	./upload/z
../upload/F)r'   rJ   rK   ospathnormpathexistsisfile)r   r   
candidates	candidate	norm_pathr   r   r   resolve_image_pathB  s$   	r   zmenu:button1cbstatec                    s   | j j}t|}t|dpd}z
| j I dH  W n	 ty#   Y nw | jj|t|dI dH }|	t
jI dH  |j|jdI dH  |  I dH  dS )uZ   Обработчик открытия каталога - запрашивает городtext2u,   Введите название городаNreply_markup)prompt_msg_id)	from_useridr   r   messagedeleter(   answerr?   	set_stater   r   update_data
message_id)r   r   r   r   r   
prompt_msgr   r   r   open_catalog^  s   r   r   c                    s  | j j}t|}| jpd }z	|  I dH  W n	 ty"   Y nw z| I dH }|d}|r?| j	j
| jj|dI dH  W n	 tyI   Y nw t|}|rot|dpVd}t||}	| j||	dI dH  | I dH  dS t|dpud	}
| j|
t|dI dH  dS )
uG   Обработчик ввода города пользователемrI   Nr   )chat_idr   text4u   Найдены городаr   text3u>   Город не найден. Попробуйте снова.)r   r   r   r:   r'   r   r(   get_datagetbotdelete_messagechatrX   r   r   r   clearr?   )r   r   r   r   	user_textdata	prompt_idrW   r   kbr   r   r   r   handle_city_inputo  s6   

r   c                    sb  | j j}t|}zt| jttd }W n ty*   | jdddI dH  Y dS w t	|}|rS||krSt
||}|rKtd| d| d|  ntd|  |pX|pXd	}z
| j I dH  W n	 tyl   Y nw t|}|rt|pxd
}t|dpd| d}	| jj|	t|||dI dH  nt|dpd}
| jj|
t|dI dH  |  I dH  dS )u   Обработчик выбора города - показывает товары для этого города и меняет языкNu&   Ошибка выбора городаT
show_alertzChanged language for user z to z based on city z#Failed to change language for user u   Русскийu!   неизвестный городtext5u   Товары в городе r   r   text6u    Товары не найдены)r   r   r   rA   r   r   r   rf   r   ra   r   r)   r   r*   r   r   r(   r   rb   r   r   r?   )r   r   current_langrY   r_   successr   r   	city_namer   r   r   r   r   on_city_clicked  s:   
 r   c              
      sv  | j j}t|}| jttd }z|dd\}}t|}t|}W n ty8   | j	dddI dH  Y dS w t
|}t|}	|sO| j	dddI dH  dS d|	pSd	 }
d
|dd }|dd}|rld| nd}t|dptd}|r|d| nd}|
|g}|r|| |r|| d|}t||}t||||}z
| j I dH  W n	 ty   Y nw |dd}|r't|\}}|rz*|r| jj|||dI dH  n| jjt|||dI dH  td| d|  W n@ ty } ztd| d|  | jj	||dI dH  W Y d}~nd}~ww | jj	||dI dH  n| jj	||dI dH  | 	 I dH  dS )u   Обработчик выбора товара - показывает детальную информацию с картинкой и тегамиNr   r@   u&   Ошибка выбора товараTr   u   Товар не найденu   🏙️ Город: u   Не указанu   📦 Товар: r   r   r   rI   u   📝 r   
r   )photocaptionr   z$Successfully sent photo for product r   z!Failed to send photo for product r   )r   r   r   r   r   r   r   rA   r(   r   r   rb   r   r   ro   joinr   r   r   r   r   answer_photor   r)   r   r*   )r   r   r   payloadpid_strcid_strrw   rY   productr   	city_line	name_linedescription	desc_linetext6_content
text6_linemessage_partscaption_textr   r   
image_pathis_urlresolved_pathr0   r   r   r   on_product_clicked  sz   



"r  c                    s   | j j}t|}| jttd }z|dd\}}}}t|}t|}	t|}
W n ty>   | j	dddI dH  Y dS w z
| j
 I dH  W n	 tyR   Y nw t|dpYd}t|	}t||||	|
|}| j
j	||d	I dH  | 	 I dH  dS )
u[   Обработчик выбора тега товара - показывает районыNr   r   u*   Ошибка выбора вариантаTr   text7u-   Выберите район доставки:r   )r   r   r   r   r   r   r   rA   r(   r   r   r   r   rr   r   )r   r   r   r   r   r   tag_index_strr   rw   rY   rx   text7_contentrp   r   r   r   r   on_tag_clicked  s.   r	  c                    s   | j j}t|}| jttd }z|dd\}}}}}t|}	t|}
t|}W n ty?   | j	dddI dH  Y dS w z
| j
 I dH  W n	 tyS   Y nw t|dpZd}t||	|
||}| j
j	||d	I dH  | 	 I dH  dS )
ue   Обработчик выбора доставки - показывает опции доставкиNr      u*   Ошибка выбора доставкиTr   text33u/   Выберите способ доставки:r   )r   r   r   r   r   r   r   rA   r(   r   r   r   r   r   )r   r   r   r   r   r   r  r   delivery_typerw   rY   rx   text33_contentr   r   r   r   on_delivery_clicked5  s,   r  c              	      s:  | j j}t|}| jttd }z|dd\}}}}}t|}	t|}
t|}W n ty?   | j	dddI dH  Y dS w z
| j
 I dH  W n	 tyS   Y nw t }d}|D ]\}}||krg|} nq[|sld}t |	 d|
 d| d| d		}ttt||d
ggd}| j
j	||dI dH  | 	 I dH  dS )u   Обработчик выбора опции доставки - показывает текст доставки в сообщенииNr   r
  u5   Ошибка выбора опции доставкиTr   rI   u<   Информация о доставке не найденаr   r9   r<   r   )r   r   r   r   r   r   r   rA   r(   r   r   r   ru   r   r   r   r1   )r   r   r   r   r   r   r  r   r   rw   rY   rx   r   r   r   r:   back_to_delivery_cbr   r   r   r   on_delivery_info_clickedS  sD    r  c                    s   | j j}t|}| jttd }z|dd\}}}}}t|}	t|}
t|}W n ty?   | j	dddI dH  Y dS w z
| j
 I dH  W n	 tyS   Y nw t|dpZd}t||	|
||||}| j
j	||d	I dH  | 	 I dH  dS )
u]   Обработчик выбора района - показывает опции оплатыNr   r
  u&   Ошибка выбора районаTr   text10+   Выберите способ оплаты:r   )r   r   r   r   r   r   r   rA   r(   r   r   r   r   r   )r   r   r   r   r   r   r  r   r   rw   rY   rx   text10_contentr   r   r   r   on_district_clicked~  s,   r  payment:c                    s  | j j}t|}| jtdd }z|dd\}}}}}	}
t|}t|}t|}W n ty@   | jdddI dH  Y dS w z
| j	
 I dH  W n	 tyT   Y nw |j||||	|
|dI dH  t||}|j|d	I dH  |d
krddlm} || |I dH  n<|dkrddlm} t|}|r|ddnd}|| |||I dH  n|dkrt| |I dH  n|dkrt| |I dH  |  I dH  dS )u   Обработчик выбора способа оплаты - передает управление в соответствующие модулиr  Nr      u5   Ошибка выбора способа оплатыTr   )rw   rY   rx   r   r   payment_method)product_base_price	cryptobotr   )handle_cryptobot_paymentcard)show_bank_card_paymentr   u
   Товарbalanceoperator)r   r   r   r   r   r   rA   r(   r   r   r   r   r   handlers.cryptobotr  handlers.bank_cardr  r   r   handle_balance_paymenthandle_operator_payment)r   r   r   r   r   r  r   r   r  r   r   rw   rY   rx   r   r  r  r   r   r   r   r   on_payment_selected  sR   

r#  c                    sH  | j j}t|}td | I dH }|d}|r|dkr,d}| j|I dH  dS t|}||k rFt	|dp:d}| j|I dH  dS ddl
m} |||}	|	s`d	}| j|I dH  dS dd
lm}
 |
||d| jI dH }|rtd t	|dp}d}| j|I dH  td ntd d}| j|I dH  | I dH  dS )u3   Обработчик оплаты с балансаz=== HANDLE BALANCE PAYMENT ===Nr  r   u4   Ошибка: неверная цена товараtext18u@   ❌ Недостаточно средств на балансе!)update_user_balanceu>   Ошибка списания средств с баланса)
save_orderbutton16zBOrder successfully saved to database with payment method: button16text23uL   ✅ Оплата прошла успешно с вашего баланса!z$Showing text23 after balance paymentz Failed to save order to databaseu.   Ошибка сохранения заказа)r   r   r   printr   r   r   r   r   r   dbr%  handlers.order_saver&  r   r   )r   r   r   r   
state_datar   
error_textr   r%  balance_updatedr&  order_savedr(  r   r   r   r!    s@   


r!  c                    sL   | j j}t|}td t|dpd}| j|I dH  | I dH  dS )u7   Обработчик связи с оператором=== HANDLE OPERATOR PAYMENT ===text24uS   Свяжитесь с оператором для оформления заказаN)r   r   r   r)  r   r   r   r   )r   r   r   r   r1  r   r   r   r"    s   r"  c              
   C   r   r7   r   r+   r   r   r   r8     r2   c               
   C   rs   )uL   Получает список кошельков из таблицы walletszg
            SELECT name FROM sqlite_master 
            WHERE type='table' AND name='wallets'
        z,SELECT name, text FROM wallets ORDER BY namer   r@   zget_wallets error: Nrn   )r-   r.   rF   walletsr/   r   r:   r0   r   r   r   get_wallets+  rv   r3  r2  c                 C   s^   g }|D ]\}}| t|t | dg qt | d}| tt| |dg t|dS )u9   Строит клавиатуру с кошелькамиr9   :backr<   )ro   r   WALLET_CB_PREFIXr   r1   r   )r   r2  r   rF   r   r:   back_to_payment_cbr   r   r   build_wallets_keyboardM  s   

r7  c                 C   s   d}t tt| |dggdS )uc   Строит клавиатуру с кнопкой назад для текста кошелькаback_to_walletsr9   r<   )r   r   r1   )r   back_to_wallets_cbr   r   r   build_wallet_text_keyboard^  s
   r:  c           	         s   | j j}t|}td z
| j I dH  W n	 ty    Y nw t|dp'd}t }|r?t	|||}| jj
||dI dH  nd}t | d}| jj
|ttt||dggd	dI dH  | I dH  dS )
u_   Обработчик связи с оператором - показывает кошелькиr0  Ntext34r  r   A   Способы оплаты временно недоступныr4  r9   r<   )r   r   r   r)  r   r   r(   r   r3  r7  r   r   r   r   r1   r   )	r   r   r   r   text34_contentr2  r   r-  r6  r   r   r   r"  i  s(   
c                    s   | j j}t|}| jttd }z
| j I dH  W n	 ty%   Y nw t	 }d}|D ]\}}||kr9|} nq-|rLt
|}| jj||dI dH  nd}	d}
| jj|	ttt||
dggddI dH  |  I dH  dS )ue   Обработчик выбора кошелька - показывает текст кошелькаNrI   r   u<   Информация о кошельке не найденаr8  r9   r<   )r   r   r   r   r   r5  r   r   r(   r3  r:  r   r   r   r1   )r   r   r   wallet_namer2  wallet_textr   r:   r   r-  r9  r   r   r   on_wallet_clicked  s2   
r@  r8  c                    s   | j j}t|}z
| j I dH  W n	 ty   Y nw t|dp#d}t }|r;t|||}| jj	||dI dH  nd}t
 | d}| jj	|ttt||dggddI dH  | 	 I dH  dS )	uH   Обработчик возврата к списку кошельковNr;  r  r   r<  r4  r9   r<   )r   r   r   r   r   r(   r   r3  r7  r   r   r   r   r1   )r   r   r   r=  r2  r   r-  r6  r   r   r   back_to_wallets_handler  s&   
rA  c                    s  | j j}t|}| jttd }d|vrdS z
| j I dH  W n	 ty+   Y nw |	 I dH }|
d}|
d}|
d}|
d}	|
d}
t||||	|
grrt|dp[d	}t|||||	|
|}| jj||d
I dH  nt|| jjjI dH  |  I dH  dS )uQ   Обработчик возврата к выбору способа оплатыNr4  rw   rY   rx   r   r   r  r  r   )r   r   r   r   r   r   r   r   r(   r   r   allr   r   r   send_main_menur   )r   r   r   r   r   r,  rw   rY   rx   r   r   r  r   r   r   r   back_to_payment_handler  s.   




rD  )]loggingr   r    aiogramr   r   aiogram.typesr   r   r   r   aiogram.types.input_filer   aiogram.fsm.stater	   r
   aiogram.fsm.contextr   r*  r   r   r   r   r   r   router	getLoggerr   r)   r>   r   r   r   r   r   r   r5  r   r&   r1   r3   r4   r5   r6   r8   r?   listtuplerA   rG   rX   ra   rb   rd   rj   boolrm   rr   ru   r   r   r   r   dictr   r   r   r   r   r   r   callback_queryr   r   r   r   r   rK   r   r  r	  r  r  r  r#  r!  r"  r3  r7  r:  r@  rA  rD  r   r   r   r   <module>   s     

	" !&"&&.6*"*+
,X *95&"#$