o
    eOj                     @   sN  d dl 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 d dlmZ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mZ d dlmZ d dl m!Z! eddZ"dZ#h dZ$G dd deZ%e"&ede"&ej'(e$dedede)ddfddZ*e"&e%j+dededede)ddf
ddZ,e"&ej'-ddededede)ddf
d d!Z.	 d7deded"e)de)d#e/ddfd$d%Z0d&e1d"e)d#e/d'e/de)defd(d)Z2e"3d*d+ d,ededede)ddf
d-d.Z4e"3d/d+ d,edede)ddfd0d1Z5d2ede)de)fd3d4Z6deded2edede)ddfd5d6Z7dS )8    )RouterF)TelegramBadRequest)Command)
FSMContext)StateStatesGroup)MessageCallbackQueryInlineKeyboardMarkupInlineKeyboardButton)InlineKeyboardBuilder)logger)AsyncSession)get_movie_by_codesearch_moviesrecord_view)UserMovie)get_text)settingssearch)name   >      🔍 Search   🔍 Qidirish   🔍 Поискc                   @   s   e Zd Ze ZdS )SearchStateN)__name__
__module____qualname__r   waiting_query r"   r"   E/var/www/www-root/data/www/ai-bot.pdev.uz/bot/handlers/user/search.pyr      s    
r   messagestatelangreturnNc                    s.   |  td|I dH  |tjI dH  dS )u9   Qidiruv boshlash — /search yoki '🔍 Qidirish' tugmasisearch-promptN)answerr   	set_stater   r!   )r$   r%   r&   r"   r"   r#   
cmd_search   s   r+   sessionc                    sb   | j  }|s|tjI dH  | td|I dH  dS | I dH  t| |||I dH  dS )zQidiruv so'rovini qayta ishlashNr(   )	textstripr*   r   r!   r)   r   clear
_do_search)r$   r%   r,   r&   queryr"   r"   r#   process_search_query+   s   
r2   z^\d+$db_userc                    s^   | j   }t||I dH }|s!| td||dI dH  dS t| |||||I dH  dS )u5   Faqat raqam kiritilsa — kino kodi deb qabul qilamizNmovie-not-foundcode)r-   r.   upperr   r)   r   _send_movie)r$   r,   r3   r&   botr6   movier"   r"   r#   process_movie_code<   s   	r;   r1   offsetc              
      s   t ||t|dI dH \}}|s| td||dI dH  dS td||dd }t||d dD ]\}}	|	|}
|	jp=d	}|td
|||
||	jdd 7 }q0|dtd| 7 }t|||||}| j||dI dH  dS )z*Qidiruv bajarish va natijalarni ko'rsatish)limitr<   Nzsearch-no-results)r1   zsearch-results-headerz

   )start zsearch-result-item)numtitleyearr6   
zsearch-select-prompt)reply_markup)	r   MOVIES_PER_PAGEr)   r   	enumerate	get_titlerC   r6   _build_search_results_keyboard)r$   r,   r1   r&   r<   moviestotalr-   ir:   rB   rC   keyboardr"   r"   r#   r0   O   s$   


r0   rJ   rK   c           	   
   C   s   t  }| D ]}||}|td|dd  d|j d qg }|dkr<|tdd|t  d	|dd  d |t |k rW|td
d|t  d	|dd  d |r^|j|  | S )u8   Qidiruv natijalari klaviaturasi — tanlash + paginationu   🎬 N(   movie:)r-   callback_datar   u   ◀️p::u   ▶️)r   rH   rowr   r6   appendrF   	as_markup)	rJ   r1   r<   rK   r&   builderr:   rB   nav_rowr"   r"   r#   rI   o   s*   

""
rI   c                 C      | j o| j dS )NrO   data
startswithcr"   r"   r#   <lambda>       r^   callbackc                    st   | j dd }t||I dH }|s$| jtd||dddI dH  dS t| j|||||I dH  |  I dH  dS )zKino tanlanganda forward qilishrR   r>   Nr4   r5   T)
show_alert)rZ   splitr   r)   r   r8   r$   )r`   r,   r3   r&   r9   r6   r:   r"   r"   r#   process_movie_select   s   	rc   c                 C   rX   )NrQ   rY   r\   r"   r"   r#   r^      r_   c                    s   | j d}t|dkrt|d nd}t|dkr|d nd}| jjr2d| jjv r2zW n   Y | j I dH  t| j||||I dH  |  I dH  dS )z&Qidiruv paginatsiyasi (p:offset:query)rR   r>   r      r@   u   🎬N)	rZ   rb   lenintr$   r-   deleter0   r)   )r`   r,   r&   partsr<   r1   r"   r"   r#   process_search_pagination   s   ri   r:   c                    s   | j rd fdd| j D nd}td |  | jpd| jp!d| jp%d|| jr-| jjnd| j	p2d| j
p6d|  | jd dS )	z*Kino ma'lumotlari kartochkasini formatlashz, c                 3   s    | ]}|  V  qd S )N)get_name).0gr&   r"   r#   	<genexpr>   s    z)_build_movie_info_text.<locals>.<genexpr>r@   z
movie-infor   r>   )
rB   rC   durationcountrygenres	lang_typeimdb	kinopoiskdescriptionviews)rq   joinr   rH   rC   ro   rp   language_typevalueimdb_ratingkinopoisk_ratingget_description
view_count)r:   r&   rq   r"   rm   r#   _build_movie_info_text   s   $r~   c              
      sr  z|j | jjtj|jdddI dH  W n tyn } zNdt| v s,dt| v rLd|_	t
d|j d	|j d
 | td||jdI dH  nt
d|j d|  | td|I dH  W Y d}~dS d}~w ty } z!t
d|j dt|j  | td|I dH  W Y d}~dS d}~ww t||}| |I dH  |rt||j|jI dH  dS dS )z2Kinoni yuborish, ma'lumot kartochkasini ko'rsatishr@   T)chat_idfrom_chat_id
message_idcaptionprotect_contentNzmessage to copy not foundmessage_id_invalidFzMovie z deactivated: channel msg z
 not foundr4   r5   zcopy_message failed for z: zerror-generalzMovie send error )copy_messagechatidr   movie_channel_idchannel_message_idr   strlower	is_activer   warningr6   r)   r   error	Exceptiontyper   r~   r   )r$   r9   r,   r:   r3   r&   e	info_textr"   r"   r#   r8      s:   	 
r8   )r   )8aiogramr   r   aiogram.exceptionsr   aiogram.filtersr   aiogram.fsm.contextr   aiogram.fsm.stater   r   aiogram.typesr	   r
   r   r   aiogram.utils.keyboardr   logurur   sqlalchemy.ext.asyncior   bot.database.crud.movier   r   r   bot.database.modelsr   r   bot.services.i18nr   
bot.configr   routerrF   _SEARCH_BTNr   r$   r-   in_r   r+   r!   r2   regexpr;   rf   r0   listrI   callback_queryrc   ri   r~   r8   r"   r"   r"   r#   <module>   s    



 
%