
    Iji9                        d dl mZmZ d dlmZmZ d dlmZmZm	Z	m
Z
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 d dlZ edd	g
          Ze                    d          defd            Ze                    d          defd            Ze                    d          defd            Ze                    d          defd            Ze                    d          defd            ZdS )    )	APIRouterHTTPException)get_gemini_modellogger)save_daily_logsave_structured_diaryget_yesterday_dataupdate_yesterday_ai_feedbackget_all_daily_notesupdate_boss_commentget_today_data)ReportAnalyzeRequestSystemMessageRequestYesterdayRequest)classify_and_save)	BaseModelNz/goal-skill-t/apiReport)prefixtagsz/Report/all/{session_id}
session_idc                   K   	 t          |           }|sg ddS g }|D ]}|                    t          |                    dd                    |                    dd          |                    dd          |                    dd          |                    dd          d	           d
|iS # t          $ r!}t          d|            g ddcY d }~S d }~ww xY w)Nu   記録はありません。datamessagedate learningtoday_mindsetadviceboss_comment)r   r   mindsetr   r    r   zFetch All Notes API Error: u0   データの読み取りに失敗しました。)r   appendstrget	Exceptionprint)r   rowsresponse_datarowes        !/app/app/routers/report_router.pyfetch_all_logsr,      s.     [":.. 	J+HIII 	 	C  CGGFB//00GGJ3377?B77''(B// # ; ;" "     && [ [ [/A//000'YZZZZZZZZ[s#   B1 BB1 1
C;CCCz/Report/system-messagerequestc                   K   	 t                      }ddddd}|                    | j        d          }d| d}|j                            d	|d
di          }d|j                                        iS # t          $ r@}t          d|            ddddd}d|                    | j        d          icY d }~S d }~ww xY w)Nu   カリキュラムを作成する前に、現在のコンディション（日記）を入力するよう優しく促すメッセージ（日本語、1文、親しみやすい敬語）u   生成されたパーソナライズカリキュラムを提示し、確認してみるよう勧めるメッセージ（日本語、1文、自信のある口調）um   提示したカリキュラムが気に入ったか、感想を尋ねるメッセージ（日本語、1文）u   ユーザーがカリキュラムを承諾した際、力強く学習を始めようと励ますメッセージ（日本語、1文、情熱的な口調）)check_conditionshow_curriculumask_feedbackstart_learninguI   ユーザーへの自然な挨拶のメッセージ（日本語、1文）zm
        Task: Generate a natural, friendly system message in Japanese for an AI Tutor app.
        Context: zt
        Constraint: Do not repeat the same phrase. Be creative but concise. Output only the Japanese text.
        gemini-2.5-flashtemperatureg?modelcontentsconfigr   zSystem Message Error: u]   カリキュラムを作成する前に、今日のあなたの状態を把握しますね。uc   今日のパーソナライズされたカリキュラムです。確認してみてください。u3   今回のカリキュラムはいかがですか？uN   いいですね。では、すぐにカリキュラムを始めましょう！r   )	r   r$   message_typemodelsgenerate_contenttextstripr%   r&   )r-   clientcontext_maptarget_contextpromptresponser*   fallback_maps           r+   get_system_messagerD   )   sG     &G!##  Z  E L {	
 
 %)=  @K  L  L    =11$s 2 
 
 8=..0011 	G 	G 	G*q**+++    EQn	
 
 <++G,@"EEFFFFFFF	Gs   A/A4 4
B>>5B93B>9B>z/Report/analyzec           	      6  K   	 t                      }| j        rd }ddlm}  || j                  }t          | j        | j        | j        | j        ||           | j        r$t          | j        dd| j        d           d {V  | j        r$t          | j        dd| j        d           d {V  	 dd	l
m} dd
lm}m}  || j                  }|dk    rxd }	d }
| j        r || j        d| j                  }	| j        r || j        d| j                  }
|	|
2 || j        ||	|
           t          j        d|	 d|
 d| d           n.# t          $ r!}t          j        d|            Y d }~nd }~ww xY wd}t          | j        dd|           d {V  d|iS t#          | j        d| j                   t          | j        dd| j                   d {V  | j        rd| j         dnd}d| d| j         d}|j                            d|          }|j                                        }t#          | j        d|           t          | j        dd|           d {V  d|iS # t          $ r }t1          d |            dd!icY d }~S d }~ww xY w)"Nr   get_current_daily)r   r   r   r!   
ai_commentdailyMBr   )r   senderpartr<   source_typer!   )gemini_score_1to10)rG   update_result_b_scores)r   )mindset_scoreunderstanding_scoreu   [B完了] mindset=z, understanding=u    → result(daily=)u   [B Score] result保存失敗: u   デイリーチェックを書いてくれてありがとう！さあ、『カリキュラム』ボタンを押して、実習を始めよう！Ir   rL   rM   r<   answeruseru$   状況：現在、ユーザーは「u   」にいます。r   u   
            役割：あなたは親しみやすく、ユーザーの学習をサポートするAIメンターです。
            u  
            指示：以下の「ユーザーの発言」に対して、AIメンターとして直接、自然な日本語で返信してください。
                  ・もしユーザーが「何をすればいいか？」等と迷っている場合、現在の状況に合わせて、「昨日の記録を確認してから、画面右下の『今日のデイリーチェックへ』ボタンを押して次へ進む」か、または「今日の入力欄を埋めて提出する」ように優しく案内してください。
            注意点：
            - 返信パターンやメタ的な解説は絶対に含めないでください。
            - そのまま画面に表示される実際の返答のみを1つだけ出力してください。
            - 絵文字を適度に使って、親しみやすい口調（敬語）で簡潔に（2〜3文程度）返信してください。
            
            ユーザーの発言: "u'   "
            AIの返信:
            r3   )r6   r7   botzReport Analyze Error: u9   サーバー通信中にエラーが発生しました。)r   is_noteapp.models.goalskill_modulerG   r   r   r   r   r!   r   !app.services.goalskill_classifierrO   rP   r   infor%   errorr   r   client_stater:   r;   r<   r=   r&   )r-   r>   ai_reply
_get_dailycurrent_daily_for_saverO   rG   rP   current_dailym_scoreu_score	score_errai_response_text
state_inforA   rB   r*   s                    r+   analyze_diaryrh   T   sj     ZW!## ? R	( H TSSSSS%/Z0B%C%C"!"-\ )#,     L'73EcX[bibr  AK  L  L  L  L  L  L  L  L  L  L J'73EcX[bibq  @I  J  J  J  J  J  J  J  J  J  JKPPPPPPaaaaaaaa 1 1'2D E E 1$$"G"G p"4"4W_i\c\n"o"o"o' r"4"4W5Ez^e^p"q"q"q*g.A..w/A=`g  ~E  F  F  F  F$}$}$}RY$}$}mz$}$}$}~~~ K K KIiIIJJJJJJJJK  r#w/A#TW^noooooooooo.//
 7-vwGGG#w/A#TW^e^mnnnnnnnnnnls  mA  Ih@Thhhh  GIJ  &-_  F }55( 6  H  }**,,H7-uh???#w/A#TW^fggggggggggh'' W W W*q**+++UVVVVVVVWsP   B-I. 2BE I. 
E:E50I. 5E::&I. !CI. .
J8JJJz/Report/yesterdayc                   K   	 t          | j                  }t          d|            |sd ddS |                    d          }|                    d          }|r|s	 t	                      }|                    dd          }|                    dd          }d	| d
| d}|j                            d|ddi          }dd l}	 |	j        |j	                  }
|
                    dd          }|
                    dd          }t          |d         ||           |}|}t          | j        dd| d|            d {V  n-# t          $ r }t          d|            d}d}Y d }~nd }~ww xY wt          |                    dd                    |                    dd          |                    dd          |                    dd          ||d}d|iS # t          $ r!}t          d |            d d!dcY d }~S d }~ww xY w)"NzDEBUG ROW DATA: u$   昨日の記録はありません。r   rH   r   r   u   なしr   z
                Task: Analyze the user's daily study log and provide feedback in JSON format.
                
                [User Log]
                Learning: z
                Mindset: a  
                
                [Requirements]
                1. "ai_comment": A warm, encouraging compliment about their learning or mindset (Japanese, polite tone).
                2. "advice": A brief, practical tip for better journaling or efficient studying based on the log (Japanese, polite tone).
                3. Output must be valid JSON only. No markdown formatting.
                
                Example format:
                {"ai_comment": "...", "advice": "..."}
                r3   response_mime_typezapplication/jsonr5   r   u'   素晴らしい取り組みですね！u   継続は力なりです。idrT   rK    rU   zAI Feedback Generation Error: u!   素晴らしい進捗ですね！u0   今日もこの調子で頑張りましょう。r   r   r    )r   r   r!   r    rH   r   r   zYesterday API Error: u0   データの読み込みに失敗しました。)r	   r   r&   r$   r   r:   r;   jsonloadsr<   r
   r   r%   r#   )r-   r)   rH   r   r>   user_learninguser_mindsetrA   rB   rm   generated_datanew_ai_comment
new_advicer*   r(   s                  r+   fetch_yesterday_logrt      s     S] !344 	&&&''' 	U -STTTWW\**
""  5	L 5	L4L)++ !$
H = ="wwAA )	 
 '  " "=99,#02DE :   !+HM!:!:!/!3!3LBk!l!l+//:WXX
 -SY
SSS ,
# (73EcX[es  cC  cC  wA  cC  cC  D  D  D  D  D  D  D  D  D  D  D L L L:q::;;;@
K	L ++,,
B//ww33GGNB77$
 
 && ] ] ])a))***)[\\\\\\\\]sN   ,G /G !C%E G 
E1E,'G ,E11A,G 
H	(H>H	H	z!/Report/today-status/{session_id}c                   K   	 ddl m} ddlm}  ||           }|dk    r || |          nd}t	          |           }|st          |           }t          |o|                    d                    }|||r|                    d          nd |rdnddS # t          $ r"}t          d	|            ddd d
cY d }~S d }~ww xY w)Nr   rF   )check_daily_note_for_dayFr    u'   今日のコメントがあります。u0   今日のコメントはまだありません。)has_notehas_commentr    r   zToday Status API Error: )rw   rx   r    )
rZ   rG   app.models.report_db_modulerv   r   r	   boolr$   r%   r&   )r   rG   rv   rb   has_note_for_dayr)   rx   r*   s           r+   fetch_today_statusr|   
  sL     OAAAAAAHHHHHH))*55 S`bcRcRc33JNNNin Z(( 	1$Z00C3:377>#:#:;; )&7BLCGGN333DO  H@@  VH	
 
 	
  O O O,,,---!%NNNNNNNNOs   BB 
CB<6C<C) fastapir   r   app.core.configr   r   ry   r   r   r	   r
   r   r   r   app.schemas.report_schemasr   r   r   r[   r   pydanticr   rm   routerr$   r#   r,   postrD   rh   rt   r|        r+   <module>r      sJ   , , , , , , , , 4 4 4 4 4 4 4 4 z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z  z c c c c c c c c c c ? ? ? ? ? ?        


 
 
 &''[S [ [ [ ('[. %&&'G&: 'G 'G 'G '&'GT [W!5 [W [W [W  [Wz  !!T]'7 T] T] T] "!T]n /00O O O O 10O O Or   