
    Vi;:                     B   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 G d d	e          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 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)	BaseModelNc                   .    e Zd ZU eed<   eed<   eed<   dS )BossCommentRequest
session_iddateboss_commentN)__name__
__module____qualname__str__annotations__     !/app/app/routers/report_router.pyr   r   	   s0         OOO
IIIr   r    Report)prefixtagsz/Report/boss-commentrequestc                    K   	 t          | j        | j        | j                  }|rdddS dddS # t          $ r(}t          d|            t          dd	
          d }~ww xY w)N)r   r   r   successu-   フィードバックを保存しました。)statusmessageerroru?   該当する日付の記録が見つかりませんでした。zSave Boss Comment Error: i  u-   サーバーエラーが発生しました。)status_codedetail)r   r   r   r   	Exceptionprintr   )r$   r&   es      r   save_boss_commentr/      s      e%) -
 
 

  	u'4cddd%2sttt e e e-!--...4cddddes   '1 1 
A##AA#z/Report/all/{session_id}r   c                   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   記録はありません。datar(   r   r    learningtoday_mindsetadvicer   )r   r3   mindsetr5   r   r2   zFetch All Notes API Error: u0   データの読み取りに失敗しました。)r   appendr   getr,   r-   )r   rowsresponse_datarowr.   s        r   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-messagec                   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   r8   message_typemodelsgenerate_contenttextstripr,   r-   )r$   clientcontext_maptarget_contextpromptresponser.   fallback_maps           r   get_system_messagerS   ;   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           	        K   	 t                      }| j        rpd }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)!N)r   r   r3   r6   
ai_commentMBr3   )r   senderpartrK   source_typer6   r   )gemini_score_1to10)get_current_dailyupdate_result_b_scores)r   )mindset_scoreunderstanding_scoreu   [B完了] mindset=z, understanding=u    → result(daily=)u   [B Score] result保存失敗: u   デイリーチェックを書いてくれてありがとう！さあ、『カリキュラム』ボタンを押して、実習を始めよう！Ir   rX   rY   rK   answeruseru$   状況：現在、ユーザーは「u   」にいます。r    u   
            役割：あなたは親しみやすく、ユーザーの学習をサポートするAIメンターです。
            u  
            指示：以下の「ユーザーの発言」に対して、AIメンターとして直接、自然な日本語で返信してください。
                  ・もしユーザーが「何をすればいいか？」等と迷っている場合、現在の状況に合わせて、「昨日の記録を確認してから、画面右下の『今日のデイリーチェックへ』ボタンを押して次へ進む」か、または「今日の入力欄を埋めて提出する」ように優しく案内してください。
            注意点：
            - 返信パターンやメタ的な解説は絶対に含めないでください。
            - そのまま画面に表示される実際の返答のみを1つだけ出力してください。
            - 絵文字を適度に使って、親しみやすい口調（敬語）で簡潔に（2〜3文程度）返信してください。
            
            ユーザーの発言: "u'   "
            AIの返信:
            rB   )rE   rF   botzReport Analyze Error: u9   サーバー通信中にエラーが発生しました。)r   is_noter   r   r   r3   r6   r   !app.services.goalskill_classifierr[   app.models.goalskill_moduler\   r]   r   infor,   r)   r   r(   client_staterI   rJ   rK   rL   r-   )r$   rM   ai_replyr[   r\   r]   current_dailym_scoreu_score	score_errai_response_text
state_inforP   rQ   r.   s                  r   analyze_diaryrr   f   sA     VW!## ? N	( H ""-\ )#     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 BD8 7I 8
E#EI E##&I 
CI 
J!I<6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$   昨日の記録はありません。r1   rU   r5   r3   u   なしr4   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": "..."}
                rB   response_mime_typezapplication/jsonrD   r   u'   素晴らしい取り組みですね！u   継続は力なりです。idra   rW    rb   zAI Feedback Generation Error: u!   素晴らしい進捗ですね！u0   今日もこの調子で頑張りましょう。r   r    r   )r   r3   r6   r   rU   r5   r2   zYesterday API Error: u0   データの読み込みに失敗しました。)r	   r   r-   r8   r   rI   rJ   jsonloadsrK   r
   r   r,   r   )r$   r;   rU   r5   rM   user_learninguser_mindsetrP   rQ   rw   generated_datanew_ai_comment
new_advicer.   r:   s                  r   fetch_yesterday_logr~      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   	 t          |           }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   u'   今日のコメントがあります。u0   今日のコメントはまだありません。)has_notehas_commentr   r(   zToday Status API Error: F)r   r   r   )r   boolr8   r,   r-   )r   r;   r   r   r.   s        r   fetch_today_statusr     s      OZ((993:377>#:#:;; !&7BLCGGN333DO  H@@  VH	
 
 	
  O O O,,,---!%NNNNNNNNOs   A#A( (
B2B	BB)"fastapir   r   app.core.configr   r   app.models.report_db_moduler   r   r	   r
   r   r   r   app.schemas.report_schemasr   r   r   rg   r   pydanticr   rw   r   routerpostr/   r8   r   r<   rS   rr   r~   r   r   r   r   <module>r      s   , , , , , , , , 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 ? ? ? ? ? ?              
 


 
 

 #$$e%7 e e e %$e &''[S [ [ [ ('[. %&&'G&: 'G 'G 'G '&'GT WW!5 WW WW WW  WWr  !!T]'7 T] T] T] "!T]n /00O O O O 10O O Or   