o
    <6j                     @   s  d dl m Z mZm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mZmZmZmZ dedefdd	Zd'dededefddZd(dededefddZdedefddZdedeeef fddZ	d)dededeeeef  fddZd*dededefddZ	d+dededee deeeef  fdd Zd)dededeeef fd!d"Zdedefd#d$Z dedefd%d&Z!dS ),    )datetime	timedeltatimezone)ListOptionalTuple)funcselectand_)AsyncSession)UserMovie	MovieViewMandatoryChannelLanguagesessionreturnc                    &   |  tttjI d H }| S N)executer	   r   countr   id
scalar_oner   result r   H/var/www/www-root/data/www/ai-bot.pdev.uz/bot/database/crud/analytics.pyget_total_users      r      daysc                    H   t tjt|d }| ttt	j
t	j|kI dH }| S )z!Oxirgi N kunda yangi userlar sonir    N)r   nowr   utcr   r   r	   r   r   r   r   whereregistered_atr   r   r    sincer   r   r   r   get_new_users_count      
r)      c                    r!   )z Oxirgi N kunda faol userlar sonir"   N)r   r#   r   r$   r   r   r	   r   r   r   r   r%   last_active_atr   r'   r   r   r   get_active_users_count   r*   r-   c                    s2   |  tttjtjdkI d H }| S NT)	r   r	   r   r   r   r   r%   	is_bannedr   r   r   r   r   get_banned_users_count#   s
   
r0   c                    s<   |  ttjttjtjI dH }dd | D S )zTillar bo'yicha user taqsimotiNc                 S   s   i | ]
}|d  j |d qS )r   r   )value.0rowr   r   r   
<dictcomp>0       z)get_users_by_language.<locals>.<dictcomp>)	r   r	   r   languager   r   r   group_byallr   r   r   r   get_users_by_language*   s   
r:      c                    s   t tjt|d }| ttt	j
dtt	jdt	j
|ktt	j
tt	j
I dH }dd | D S )z.Oxirgi N kun uchun kunlik ro'yxatdan o'tishlarr"   dater   Nc                 S   s   g | ]
}t |j|jfqS r   )strr<   r   r2   r   r   r   
<listcomp>A   r6   z+get_daily_registrations.<locals>.<listcomp>)r   r#   r   r$   r   r   r	   r   r<   r   r&   labelr   r   r%   r8   order_byr9   r'   r   r   r   get_daily_registrations3   s   
	rA   Tonly_activec                    s>   t ttj}|r|tjdk}| |I d H }| S r.   )	r	   r   r   r   r   r%   	is_activer   r   )r   rB   qr   r   r   r   get_total_moviesF   s   rE   
   Nlimitc                    s   |rCt tjt|d }| ttt	t
jdt
tjt
jktjdkt
j|ktjt	t
j |I dH }n$| tttjdktj |I dH }dd |  D S dd | D S )uO   
    Eng ko'p so'ralgan kinolar.
    days berilsa — oxirgi N kun ichida.
    r"   viewsTNc                 S   s   g | ]}||j fqS r   )
view_count)r3   movier   r   r   r>   f   s    z"get_top_movies.<locals>.<listcomp>c                 S   s   g | ]}|j |jfqS r   )r   rH   r2   r   r   r   r>   h   s    )r   r#   r   r$   r   r   r	   r   r   r   r   r   r?   joinmovie_idr%   rC   	viewed_atr8   r@   descrG   rI   scalarsr9   )r   rG   r    r(   r   r   r   r   get_top_moviesN   s&   	
rP   c                    s   t tjt|d }| ttdt	j
dtt	jdt	j
|ktdt	j
tdt	j
I dH }dd | D S )u3   Soat bo'yicha faollik (peak hours) — oxirgi N kunr"   hourr   Nc                 S   s   i | ]	}t |j|jqS r   )intrQ   r   r2   r   r   r   r5   w   s    z'get_hourly_activity.<locals>.<dictcomp>)r   r#   r   r$   r   r   r	   r   extractr   rM   r?   r   r   r%   r8   r@   r9   r'   r   r   r   get_hourly_activityk   s   
	rT   c                    r   r   )r   r	   r   r   r   r   r   r   r   r   r   get_total_viewsz   r   rU   c              
      s   t | I dH t| ddI dH t| ddI dH t| ddI dH t| ddI dH t| ddI dH t| I dH t| I dH dt| I dH t| I dH t| dddI dH t| dddI dH t| d	d
I dH t| ddI dH ddS )zAdmin uchun to'liq statistikaNr   r"   r;   r+   )totaltodayweekmonth	active_7d
active_30dbannedby_language   )rG   r    rF   )rG   )rV   total_views	top_todaytop_weektop_all_timehourly_activity)usersmovies)	r   r)   r-   r0   r:   rE   rU   rP   rT   )r   r   r   r   get_full_stats   s$   rf   )r   )r+   )r;   )T)rF   N)"r   r   r   typingr   r   r   
sqlalchemyr   r	   r
   sqlalchemy.ext.asyncior   bot.database.modelsr   r   r   r   r   rR   r   r)   r-   r0   dictr=   r:   rA   boolrE   rP   rT   rU   rf   r   r   r   r   <module>   s@    		

	
 