o
    75i                     @   s^   d Z ddlmZ ddlmZ ddlZddlm	Z	 ddl
mZ ddlmZ d	e	d
efddZdS )u   워터폴 차트 생성    )BytesION   )	ChartData)CHART_COLORS   )setup_japanese_font
chart_datareturnc              
   C   s  t   | j}| jst S | jd }|dg }|ddgt| }dddd}tjd	d
\}}t	t|}d}	d}
g }g }g }t
t||D ]A\}\}}|dkr]|d || n#|dkrp||
 || |
|7 }
n|
|7 }
||
 |t| |||d qH|j|||	||ddd}tt|d D ]/}||d  dkr|| ||  }|j|| |	d  ||d  |	d  g||gddddd qt
t|||D ]<\}\}}}| }| |d  }t|dkr|d dd}n|d}|j|| | d  |fdddddd q|d |d || |j|dd d! |jtd"d#  |jdddd$ | jrJtj| jd%dd& |jd'd(d) | d* t!  t }tj"|d+d,d-d. |#d t$| |S )/u   워터폴 차트 생성

    Args:
        chart_data: 차트 데이터
            datasets[0]: {"data": [...], "colors": ["increase", "decrease", "total", ...]}

    Returns:
        PNG 이미지 바이트 버퍼
    r   datacolorsincreasez#16a34az#dc2626z#2563eb)r   Zdecreasetotal)
      )figsizeg333333?r   z#64748bwhiter   )bottomcolor	edgecolor	linewidthr   z--g      ?)r   	linestyler   alpha'  .0f   万z,.0fcenter	   bold)xyhavafontsize
fontweightr    u   金額-   right)rotationr   c                 S   s   | dkr| d ddS dS )Nr   r   r   r   0 )xpr(   r(   b/var/www/tkim.planitai.co.jp/gemegg/20251207-make-pdf-report/project/src/charts/waterfall_chart.py<lambda>w   s    z(create_waterfall_chart.<locals>.<lambda>)yr   r      )r!   r"   r-   g333333?)axisr   Tpng   tight)formatdpibbox_inches)%r   labelsdatasetsr   getlenpltsubplotsnparange	enumeratezipappendabsbarrangeplot
get_heightget_yannotateget_x	get_width
set_xlabel
set_ylabel
set_xticksset_xticklabelsyaxisset_major_formatterFuncFormatteraxhlinetitlegridset_axisbelowtight_layoutsavefigseekclose)r   r6   datasetvaluesZcolor_typesZ	color_mapfigaxr)   width
cumulativebottomsZ
bar_valuesZ
bar_colorsivalctypebarsZcurr_toprB   heightZy_poslabelbufferr(   r(   r+   create_waterfall_chart   s   






"







rg   )__doc__ior   matplotlib.pyplotpyplotr:   numpyr<   data_modelsr   Z
pdf.stylesr   combo_chartr   rg   r(   r(   r(   r+   <module>   s    