o
    	cj[                     @  s  d dl mZ d dlZd dlmZ d dlmZ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 d d	lmZ d
ZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dBd d!Z*dCd'd(Z+dDd,d-Z,dEd2d3Z-ddd4dFd<d=Z.dGd@dAZ/dS )H    )annotationsN)Optional)Image	ImageDraw)context)raster_circle_avatar_on_rgb)	load_font
text_widthtruncate_text)PersonalRecordStats)render_year_heatmap)   r   r   )-   r   r   )n   r   r   )7   r   r   )   r   r                  
               8      u   Power by 小埃同学statsr   returnlist[tuple]c                 C  s   ddt fdd| j d| j dfdtfdd| j d| j dfdtfd	dt fd
d| j d| j fdtfd
d| j d| j	 fdtfddt
| jfgS )u6   分区 + 留白分隔；不使用字符型分隔线。)sectionu   打卡概览padkvu   总打卡天数（u   ）u    天u   打卡图张数（u    张)r!   u   连击统计plainu   周连击    当前 u       最长 u   日连击    当前 u   点数)AFTER_SECTION_TITLEyeartotal_distinct_daysLINE_GAPtotal_checkin_images	BLOCK_GAPcurrent_weeklylongest_weeklycurrent_dailylongest_dailystrpoints)r    r1   8/home/dore/onebot/Bot_Ero/core/gen_image/profile_card.py_build_row_plan(   s$   r3   drawImageDraw.ImageDrawtextr/   intc                 C  s    | j d||d}|d |d  S )N)r   r   )font      )textbbox)r4   r6   r8   bboxr1   r1   r2   _line_heightA   s   r=   plan
draw_probe	list[int]c              	   C  s   g }| D ]P}|d }|dkr| t||d | q|dkr&| |d  q|dkr?| tt||d |t||d | q|dkrO| t||d | q| d q|S )Nr   r!   r:   r"   r#      r$   )appendr=   max)r>   r?   font_section	font_bodyhsrowkr1   r1   r2   _row_heightsF   s$   rI   widthy0floatheightsc                 C  s   |}t ||D ]b\}}	|d }
|
dkr!| jt|f|d |td nD|
dkr&n?|
dkrT|d |d }}| jt|f||td t| ||}| j|t | |f||td n|
dkre| jt|f|d |td ||	7 }q|S )	Nr   r!   r:   r8   fillr"   r#   rA   r$   )zipr6   H_PADTEXT_DIM	TEXT_MAINr	   
TEXT_VALUE)r4   rJ   rK   r>   rM   rD   rE   yrG   hrH   leftrightrwr1   r1   r2   
_draw_plana   s    	 
rZ   )user_display_nameavatarr&   day_checkin_countr[   Optional[str]r\   Optional[Image.Image]Image.Imagec          .      C  sr  t | |dd}td}tt}tt}tt}	tt}
tddt}t	
|}|j d}t|}t|||}|D ]?}|d }|dkrOt|t||d	 |}q9|d
krit|t||d	 |t||d | d }q9|dkrxt|t||d	 |}q9t|td  }t||j}|pd }|du}t|}|rtt }n|rt|||	t }nd}t| }t|||}t||||}t|}|| t | }|t }|t }t|t|
}t| t } |t |j |  }!td||!ft}"t	
|"}#|r5t |ttd}$|"!|$ttf |r4|tt t" t  }%t#|#||	t$|%}&ttt|#|&|	 d  }'|#j%tt t" |'f|&|	t&d n|rR|dt  }%t#|#||	t$|%}&|#j%ttf|&|	t&d |t|#|| d }(|#j%|(|f||t&d t$|| t })t'|#||)|||| |#j(t|f|t |fgt)d	d ||j d }*|t }+|"!||*|+f |!t | },t|#t|
}-|#j%||- d |,ft|
dd |"S )u`   拼接档案统计区与年度热力图；可选左上角头像与昵称，底部版权信息。F)include_headingr   RGB)r:   r:   u    年打卡档案r   r!   r:   r#   rA      r$    N)
backgroundrN   )rO   rJ   )   rf   rf   )*r   r   	BODY_SIZESECTION_TITLE_SIZENAME_FONT_SIZEFOOTER_FONT_SIZEr   newCARD_BGr   Drawr&   r3   r	   rC   r7   rQ   rJ   stripboolAVATAR_SIZESECTION_GAPr=   	V_PAD_TOPrI   sumSEP_GAPFOOTER_TEXTFOOTER_PAD_TOPFOOTER_PAD_BOTTOMHEATMAP_GAPheightr   paste
AVATAR_GAPr
   rL   r6   rS   rZ   line	SEPARATOR).r&   r]   r   r[   r\   heatmap	font_headrE   rD   	font_namefont_footerprober?   
card_titler>   inner_wrG   rH   stats_widthrJ   name_strshow_avatar	show_nameheader_before_titletitle_starthead_hrow_heights
body_blocktext_block_endsep_ystats_bottomfooter_line_hfooter_blocktotal_houtr4   circname_max	name_drawnytxy_statshxhyfyftwr1   r1   r2   build_personal_record_image|   s   	


 r   user_id	image_objc                 C  s8   t j d}tj|dd | d|  d}|| |S )Nz/personal_recordsT)exist_ok/z_calendar_heatmap_monthly.png)r   python_data_pathosmakedirssave)r   r   out_dirpathr1   r1   r2   save_personal_record_png   s
   
r   )r   r   r   r    )r4   r5   r6   r/   r   r7   )r>   r    r?   r5   r   r@   )r4   r5   rJ   r7   rK   rL   r>   r    rM   r@   r   rL   )r&   r7   r]   r@   r   r   r[   r^   r\   r_   r   r`   )r   r7   r   r`   r   r/   )0
__future__r   r   typingr   PILr   r   corer   core.gen_image.avatar_helperr   core.gen_image.fontsr   r	   r
   core.gen_image.modelsr   core.gen_image.year_heatmapr   rl   rS   rR   rT   r}   rQ   rr   r(   rq   rx   rt   rh   rg   r*   r%   rp   r{   ri   ru   rj   rv   rw   r3   r=   rI   rZ   r   r   r1   r1   r1   r2   <module>   sN    



 c