+
    �A‰iH$  ã            
       ó  € R t ^ RIt^ RIt^ RIHt ^ RIHtHt ]P                  P                  ^ ]P                  P                  ]P                  P                  ]P                  P                  ]4      4      4      4        ! R R4      tR# )u7   
æœˆæ¬¡ãƒ¬ãƒ�ãƒ¼ãƒˆç”Ÿæˆ�ã‚µãƒ¼ãƒ“ã‚¹ - HTML/PDFç”Ÿæˆ�
N)Údatetime)ÚEnvironmentÚFileSystemLoaderc                   ó”   a € ] tR t^t o RtRV 3R lR lltR tRV 3R lR lltRV 3R lR	 lltV 3R
 lR lt	RV 3R lR llt
RtV tR# )ÚMonthlyReportHTMLu)   æœˆæ¬¡ãƒ¬ãƒ�ãƒ¼ãƒˆHTML/PDFç”Ÿæˆ�ã‚¯ãƒ©ã‚¹Nc                ó&   <€ V ^8„  d   QhRS[ RS[ /# )é   ÚdataÚanalyses)Údict)ÚformatÚ__classdict__s   "€ÚHC:\Users\tmash\Documents\claude_code\chat\reports\core\html_generator.pyÚ__annotate__ÚMonthlyReportHTML.__annotate__   s   ø€ ÷ 9ñ 9™Tð 9©Tñ 9ó    c           	     ó¦  € Wn         T;'       g    / V n        \        P                  P	                  \        P                  P                  \        P                  P                  \        P                  P                  \        4      4      4      R4      p\        \        V4      RR7      V n
        V P                  V P                  P                  R&   R# )uŽ   
Args:
    data: ReportDataAggregator.collect_all_data()ã�®æˆ»ã‚Šå€¤
    analyses: LLMAnalyzer.analyze_all()ã�®æˆ»ã‚Šå€¤ï¼ˆã‚ªãƒ—ã‚·ãƒ§ãƒ³ï¼‰
Ú	templatesT)ÚloaderÚ
autoescapeÚtojsonN)r	   r
   ÚosÚpathÚjoinÚdirnameÚabspathÚ__file__r   r   ÚenvÚ_tojson_filterÚfilters)Úselfr	   r
   Útemplate_dirs   &&& r   Ú__init__ÚMonthlyReportHTML.__init__   sŒ   € ð Œ	Ø Ÿ˜ BˆŒô —w‘w—|‘|Ü�G‰G�O‰OœBŸG™GŸO™O¬B¯G©G¯O©O¼HÓ,EÓFÓGØó
ˆô Ü# LÓ1Øô
ˆŒð
 &*×%8Ñ%8ˆ�‰×Ñ˜Ó"r   c                ó8   € ^ RI pR pVP                  VRVR7      # )u   Jinja2ç”¨ã�®JSONãƒ•ã‚£ãƒ«ã‚¿ãƒ¼Nc                 ó˜   € \        V R 4      '       d   V P                  4       # \        V R4      '       d   V P                  # \        V 4      # )Ú	isoformatÚ__dict__)Úhasattrr&   r'   Ústr)Úobjs   &r   Újson_serializerÚ9MonthlyReportHTML._tojson_filter.<locals>.json_serializer)   s;   € Ü�s˜K×(Ò(Ø—}‘}“Ð&Ü�s˜J×'Ò'Ø—|‘|Ð#Ü�s“8ˆOr   F)Úensure_asciiÚdefault)ÚjsonÚdumps)r    Úvaluer/   r+   s   &&  r   r   Ú MonthlyReportHTML._tojson_filter%   s!   € ãò	ð �z‰z˜%¨e¸_ˆzÓMÐMr   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   Ú
standaloneÚreturn)Úboolr   )r   r   s   "€r   r   r   2   s   ø€ ÷ Eñ E±ð EÁ$ñ Er   c                óT  € V P                   P                  R. 4      p/ p^ p\        V\        4      '       d`   V FX  pVP                  R^ 4      pVP                  R^ 4      pVP                  R^ 4      pWc9  d   / W6&   WƒV,          V&   W„8”  g   KV  TpKZ  	  Mh\        V\        4      '       dS   TpVP                  4        F<  p	\        V	\        4      '       g   K  V	P                  4        F  pW„8”  g   K  TpK  	  K>  	  / RV P                   R,          bRV P                   R,          bRV P                   R,          bRV P                   R,          bR	V P                   R	,          bR
V P                   R
,          bRVbRVbRV P                   R,          bRV P                   P                  R. 4      bRV P                   P                  R. 4      bRV P                   P                  R. 4      bRV P                   P                  R. 4      bRV P                   P                  R. 4      bRV P                   P                  R. 4      bRV P                   P                  R. 4      bRV P                   R,          bRV P                  R\        P                  ! 4       P                  R4      /Cp
V'       EdW   \        P                  P                  \        P                  P                  \        P                  P                  \        4      4      4      p\        P                  P                  VRRR4      p\        P                  P                  VRRR4      pRp\        P                  P!                  V4      '       d0   \#        VRRR 7      ;_uu_ 4       pVP%                  4       pR!R!R!4       Rp\        P                  P!                  V4      '       d0   \#        VRRR 7      ;_uu_ 4       pVP%                  4       pR!R!R!4       WêR"&   VV
R#&   V
#   + '       g   i     Lq; i  + '       g   i     L.; i)$u-   ãƒ†ãƒ³ãƒ—ãƒ¬ãƒ¼ãƒˆã�«æ¸¡ã�™ãƒ‡ãƒ¼ã‚¿ã‚’æº–å‚™Úhour_by_day_of_weekÚday_of_weekÚhourÚcountÚperiodÚsummaryÚ
comparisonÚdaily_statsÚhourly_statsÚday_of_week_statsÚhour_by_day_of_week_maxÚ	avg_turnsÚkeywordsÚunresolved_keywordsÚunanswered_questionsÚrecent_dislikedÚfeedback_daily_statsÚqa_usage_rankingÚcategory_usage_rankingÚestimated_savingsr
   Úgenerated_atu   %Yå¹´%mæœˆ%dæ—¥ %H:%MÚstaticÚcssú
report.cssÚjsz	charts.jsÚ Úrúutf-8©ÚencodingNÚcss_contentÚ
js_content)r	   ÚgetÚ
isinstanceÚlistr   Úvaluesr
   r   ÚnowÚstrftimer   r   r   r   r   r   ÚexistsÚopenÚread)r    r4   Úraw_hour_by_dowÚhour_by_dowÚ	max_countÚitemÚdayr:   r;   Úday_dataÚtemplate_dataÚbase_dirÚcss_pathÚjs_pathrV   ÚfrW   s   &&               r   Ú_prepare_template_dataÚ(MonthlyReportHTML._prepare_template_data2   s”  € ð Ÿ)™)Ÿ-™-Ð(=¸rÓBˆð ˆØˆ	ä�o¤t×,Ò,Û'�Ø—h‘h˜}¨aÓ0�Ø—x‘x ¨Ó*�ØŸ™ ¨!Ó,�ØÔ)Ø')�KÑ$Ø).˜CÕ  Ñ&ØÖ$Ø %’Iò (ô ˜¬×.Ò.Ø)ˆKØ'×.Ñ.Ö0�Ü˜h¬×-Ô-Ø!)§¡Ö!2˜Ø Ö,Ø(-šIó "3ñ 1ð
Ø�d—i‘i Õ)ð
à�t—y‘y Õ+ð
ð ˜$Ÿ)™) LÕ1ð
ð ˜4Ÿ9™9 ]Õ3ð	
ð
 ˜DŸI™I nÕ5ð
ð   §¡Ð+>Õ!?ð
ð " ;ð
ð & yð
ð ˜Ÿ™ ;Õ/ð
ð ˜Ÿ	™	Ÿ™ j°"Ó5ð
ð " 4§9¡9§=¡=Ð1FÈÓ#Kð
ð # D§I¡I§M¡MÐ2HÈ"Ó$Mð
ð ˜tŸy™yŸ}™}Ð->ÀÓCð
ð # D§I¡I§M¡MÐ2HÈ"Ó$Mð
ð  §	¡	§¡Ð.@À"Ó Eð
ð  % d§i¡i§m¡mÐ4LÈbÓ&Qð!
ð"   §¡Ð+>Õ!?ð#
ð$ ˜Ÿ™ØœHŸLšL›N×3Ñ3Ð4KÓLñ'
ˆ÷. ˆ:Ü—w‘w—‘¤r§w¡w§¡´r·w±w·±ÄxÓ7PÓ'QÓRˆHÜ—w‘w—|‘| H¨h¸¸|ÓLˆHÜ—g‘g—l‘l 8¨X°t¸[ÓIˆGàˆKÜ�w‰w�~‰~˜h×'Ò'Ü˜( C°'×:Õ:¸aØ"#§&¡&£(�K÷ ;ð ˆJÜ�w‰w�~‰~˜g×&Ò&Ü˜' 3°×9Õ9¸QØ!"§¡£�J÷ :ð ,7˜-Ñ(Ø*4ˆM˜,Ñ'àÐ÷ ;×:ú÷
 :×9ús   Î
PÏ PÐP	ÐP'	c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )r   Úoutput_pathr4   r5   )r)   r6   )r   r   s   "€r   r   r   y   s#   ø€ ÷ ñ ©ð Áð ÑQTñ r   c                óü  € V'       d   V P                   P                  R4      pMV P                   P                  R4      pV P                  VR7      pVP                  ! R/ VB pV'       d~   \        P
                  P                  V4      pV'       d   \        P                  ! VRR7       \        VRRR7      ;_uu_ 4       pVP                  V4       R	R	R	4       \        R
V 24       V#   + '       g   i     L ; i)uþ   
HTMLã‚’ç”Ÿæˆ�

Args:
    output_path: å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ã‚¹ï¼ˆNoneã�®å ´å�ˆã�¯HTMLæ–‡å­—åˆ—ã�®ã�¿è¿”ã�™ï¼‰
    standalone: Trueã�®å ´å�ˆã€�CSS/JSã‚’ã‚¤ãƒ³ãƒ©ã‚¤ãƒ³åŒ–ã�—ã�¦ã‚¹ã‚¿ãƒ³ãƒ‰ã‚¢ãƒ­ãƒ³HTMLã‚’ç”Ÿæˆ�

Returns:
    ç”Ÿæˆ�ã�•ã‚Œã�ŸHTMLæ–‡å­—åˆ—
zreport_standalone.htmlzreport.html)r4   T©Úexist_okÚwrS   rT   Nu   HTMLå‡ºåŠ›: © )r   Úget_templaterl   Úrenderr   r   r   Úmakedirsr_   ÚwriteÚprint)r    ro   r4   Útemplaterg   ÚhtmlÚ
output_dirrk   s   &&&     r   Úgenerate_htmlÚMonthlyReportHTML.generate_htmly   s¸   € ÷ Ø—x‘x×,Ñ,Ð-EÓF‰Hà—x‘x×,Ñ,¨]Ó;ˆHà×3Ñ3¸zÐ3ÓJˆØ�ŠÑ/ Ñ/ˆçäŸ™Ÿ™¨Ó5ˆJßÜ—’˜J°Õ6ä�k 3°×9Õ9¸QØ—‘˜”÷ :ä�L  Ð.Ô/àˆ÷	 :×9ús   ÃC+Ã+C;	c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )r   ro   r5   )r)   )r   r   s   "€r   r   r   ™   s   ø€ ÷ Nñ N©ð N±ñ Nr   c                óº  €  ^ RI HpHp T P	                  4       p\
        P                  ! \
        P                  P                  T4      RR7       \
        P                  P                  \
        P                  P                  \
        P                  P                  \        4      4      4      p\
        P                  P                  TRRR4      pT! RR	7      pT! YER
7      pT.p	\
        P                  P                  T4      '       d   T	P                  ^ T! TR7      4       TP                  YR7       \        RT 24       T#   \         d    \        R4      hi ; i)u|   
PDFã‚’ç”Ÿæˆ�ï¼ˆHTMLâ†’PDFå¤‰æ�›ï¼‰

Args:
    output_path: å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ã‚¹

Returns:
    å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ã‚¹
)ÚHTMLÚCSSu·   weasyprintã�Œã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã�•ã‚Œã�¦ã�„ã�¾ã�›ã‚“ã€‚
pip install weasyprint ã�§ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã�—ã�¦ã��ã� ã�•ã�„ã€‚
Windowsã�®å ´å�ˆã�¯GTKã�®ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã‚‚å¿…è¦�ã�§ã�™ã€‚Trq   rM   rN   rO   uL  
            @page {
                size: A4;
                margin: 15mm;
            }
            body {
                background: white;
            }
            .report-container {
                max-width: none;
            }
            .page {
                box-shadow: none;
                margin-bottom: 0;
                page-break-after: always;
            }
            .page:last-child {
                page-break-after: auto;
            }
            /* Chart.jsã�®canvasã�¯PDFã�§ã�¯ç”»åƒ�ã�¨ã�—ã�¦è¡¨ç¤ºã�•ã‚Œã�ªã�„ã�Ÿã‚�é�žè¡¨ç¤º */
            canvas {
                display: none;
            }
            .chart-container {
                min-height: 100px;
                background: #f5f5f5;
                border-radius: 8px;
                display: flex;
                align-items: center;
                justify-content: center;
                color: #999;
            }
            .chart-container::after {
                content: "ã‚°ãƒ©ãƒ•ã�¯HTMLãƒ—ãƒ¬ãƒ“ãƒ¥ãƒ¼ã�§ç¢ºèª�ã�—ã�¦ã��ã� ã�•ã�„";
                font-size: 10pt;
            }
        )Ústring)rƒ   Úbase_url)Úfilename)Ústylesheetsu   PDFå‡ºåŠ›: )Ú
weasyprintr�   r‚   ÚImportErrorr}   r   rw   r   r   r   r   r   r^   ÚinsertÚ	write_pdfry   )
r    ro   r�   r‚   Úhtml_contentrh   ri   Úpdf_cssÚhtml_docr†   s
   &&        r   Úgenerate_pdfÚMonthlyReportHTML.generate_pdf™   s  € ð	ß,ð ×)Ñ)Ó+ˆô 	�Š”B—G‘G—O‘O KÓ0¸4Õ@ô —7‘7—?‘?¤2§7¡7§?¡?´2·7±7·?±?Ä8Ó3LÓ#MÓNˆÜ—7‘7—<‘< ¨(°E¸<ÓHˆñ ð $ô $ˆñN ˜|Ô?ˆà�iˆÜ�7‰7�>‰>˜(×#Ò#Ø×Ñ˜q¡#¨xÔ"8Ô9à×Ñ˜;ÐÔ@Ü�˜K˜=Ð)Ô*àÐøôE ô 	ÜðPóð ð	ús   ‚E ÅEc                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )r   ro   Úchart_imagesr5   )r)   r   )r   r   s   "€r   r   r   é   s#   ø€ ÷ .ñ .±Cð .Átð .ÑWZñ .r   c                óV   € V'       g   V P                  V4      # V P                  V4      # )uÌ  
ã‚°ãƒ©ãƒ•ç”»åƒ�ä»˜ã��ã�§PDFã‚’ç”Ÿæˆ�

Args:
    output_path: å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ã‚¹
    chart_images: ã‚°ãƒ©ãƒ•ç”»åƒ�ã�®ãƒ‘ã‚¹è¾žæ›¸ {chart_id: image_path}

Returns:
    å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ãƒ‘ã‚¹

Note:
    Chart.jsã�¯JavaScriptä¾�å­˜ã�®ã�Ÿã‚�ã€�PDFã�«ç›´æŽ¥ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã�§ã��ã�¾ã�›ã‚“ã€‚
    äº‹å‰�ã�«ã‚µãƒ¼ãƒ�ãƒ¼ã‚µã‚¤ãƒ‰ã�§ã‚°ãƒ©ãƒ•ç”»åƒ�ã‚’ç”Ÿæˆ�ã�™ã‚‹ã�‹ã€�
    puppeteerã�ªã�©ã�®ãƒ˜ãƒƒãƒ‰ãƒ¬ã‚¹ãƒ–ãƒ©ã‚¦ã‚¶ã‚’ä½¿ç”¨ã�™ã‚‹å¿…è¦�ã�Œã�‚ã‚Šã�¾ã�™ã€‚
)rŽ   )r    ro   r‘   s   &&&r   Úgenerate_pdf_with_chartsÚ*MonthlyReportHTML.generate_pdf_with_chartsé   s+   € ÷" Ø×$Ñ$ [Ó1Ð1ð × Ñ  Ó-Ð-r   )r
   r	   r   )N)F)NT)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r"   r   rl   r}   rŽ   r“   Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      sL   ø‡ € Ù3÷9ò 9ò*N÷Eò E÷Nò ÷@Nð N÷`.÷ .ð .r   r   )r™   r   Úsysr   Újinja2r   r   r   r‰   r   r   r   r   rt   r   r   Ú<module>rž      s_   ðñó 
Û 
Ý ß 0ð ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°2·7±7·?±?À8Ó3LÓ#MÓNÔ O÷r.ó r.r   