o
    լi_0                     @   s*  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	 d	eZed
dgdZeddefddZeddefddZeddefddZeddefddZeddefddZ eddefd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                   @   s&   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__ r   r   7/home/air/goalskill_t/back/app/routers/report_router.pyr   	   s   
 r   z/goal-skill-t/apiReport)prefixtagsz/Report/boss-commentrequestc              
      sf   zt | j| j| jd}|rdddW S dddW S  ty2 } ztd|  tdd	d
d }~w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!   er   r   r   save_boss_comment   s   r*   z/Report/all/{session_id}r   c                    s   z9t | }|sg ddW S g }|D ]#}|t|dd|dd|dd|dd|ddd	 qd
|iW S  tyX } ztd|  g ddW  Y d }~S d }~ww )Nu   記録はありません。datar#   r    learningtoday_mindsetadvicer   )r   r.   mindsetr0   r   r,   zFetch All Notes API Error: u0   データの読み取りに失敗しました。)r
   appendr   getr'   r(   )r   rowsresponse_datarowr)   r   r   r   fetch_all_logs#   s(   





r7   z/Report/system-messagec              
      s   z*t  }ddddd}|| jd}d| d}|jjd	|d
did}d|j iW S  tyT } ztd|  ddddd}d|| jdiW  Y d }~S d }~w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   r3   message_typemodelsgenerate_contenttextstripr'   r(   )r    clientcontext_maptarget_contextpromptresponser)   fallback_mapr   r   r   get_system_message;   s:   rM   z/Report/analyzec              
      sT  zt  }| jrLd }t| j| j| j| j|d | jr(t| jdd| jddI d H  | jr9t| jdd| jddI d H  d}t| jdd|d	I d H  d
|iW S t| jd| j	 t| jdd| j	d	I d H  d| j	 d}|j
jd|d}|j }t| jd| t| jdd|d	I d H  d
|iW S  ty } ztd|  d
diW  Y d }~S d }~ww )N)r   r   r.   r1   
ai_commentMBr.   )r   senderpartrE   source_typer1   u   デイリーチェックを書いてくれてありがとう！さあ、『カリキュラム』ボタンを押して、実習を始めよう！Ir   rQ   rR   rE   answeruserz
            User Feedback: "zT"
            Task: Reply naturally in Japanese to the user's feedback.
            r<   )r?   r@   botzReport Analyze Error: u9   サーバー通信中にエラーが発生しました。)r   is_noter   r   r   r.   r1   r   r   r#   rC   rD   rE   rF   r'   r(   )r    rG   ai_replyai_response_textrJ   rK   r)   r   r   r   analyze_diaryf   sJ   	


r\   z/Report/yesterdayc              
      s  zt | j}td|  |sd ddW S |d}|d}|r$|szXt }|dd}|dd}d	| d
| d}|jjd|ddid}dd l}	|	|j	}
|
dd}|
dd}t
|d || |}|}t| jdd| d| dI d H  W n ty } ztd|  d}d}W Y d }~nd }~ww t|dd|dd|dd|dd||d}d|iW S  ty } ztd |  d d!dW  Y d }~S d }~ww )"NzDEBUG ROW DATA: u$   昨日の記録はありません。r+   rN   r0   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": "..."}
                r<   response_mime_typezapplication/jsonr>   r   u'   素晴らしい取り組みですね！u   継続は力なりです。idrT   rP    rU   zAI Feedback Generation Error: u!   素晴らしい進捗ですね！u0   今日もこの調子で頑張りましょう。r   r-   r   )r   r.   r1   r   rN   r0   r,   zYesterday API Error: u0   データの読み込みに失敗しました。)r   r   r(   r3   r   rC   rD   jsonloadsrE   r	   r   r'   r   )r    r6   rN   r0   rG   user_learninguser_mindsetrJ   rK   r`   generated_datanew_ai_comment
new_advicer)   r5   r   r   r   fetch_yesterday_log   sd   


&	



	rg   z!/Report/today-status/{session_id}c              
      s   z't | }t|}t|o|d}|||r|dnd |r$ddW S ddW S  tyG } ztd|  ddd dW  Y d }~S d }~ww )Nr   u'   今日のコメントがあります。u0   今日のコメントはまだありません。)has_notehas_commentr   r#   zToday Status API Error: F)rh   ri   r   )r   boolr3   r'   r(   )r   r6   rh   ri   r)   r   r   r   fetch_today_status   s"   rk   )"fastapir   r   app.core.configr   r   app.models.report_db_moduler   r   r   r	   r
   r   r   app.schemas.report_schemasr   r   r   !app.services.goalskill_classifierr   pydanticr   r`   r   routerpostr*   r3   r   r7   rM   r\   rg   rk   r   r   r   r   <module>   s0    $*>W