o
    >iP-                     @   s  d dl mZmZmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZ eddgdZd	d
 ZedeefdefddZedeefdefddZejde
deefde	fddZ ejdedeefdefddZ!ejdedeefdefddZ"ejdedeefdefdd Z#ed!eefdefd"d#Z$ed$eefdefd%d&Z%ed'eefdefd(d)Z&ed*eefdefd+d,Z'ed-eefdefd.d/Z(ed0eefdefd1d2Z)ed3eefdefd4d5Z*ed6eefdefd7d8Z+ed9eefdefd:d;Z,ed<defd=d>Z-d?S )@    )	APIRouterHTTPExceptionDepends)	BaseModel)datetime)StartDayRequestCheckInRequestCheckInResponseMorningAssessmentRequestMorningAssessmentResponseMorningReflectionResponseMorningReflectionRequestEndDayRequestEndDayResponseSubmitSalesReportRequestBossCommentRequestCounselingRequestFinalReviewAnalysisRequestSubmitFinalReviewRequestFinishCounselingRequest)today_goal_modulez/goalskill-sales/apiz
Today Goal)prefixtagsc                  c   s*    t  } z
| V  W |   d S |   w )N)r   get_db_connectionclose)conn r   ?/home/air/goalskill_sales/back/app/routers/today_goal_router.pyget_db   s
   r   z/goal-templates
session_idc              
   C   sZ   |j dd}zd}||| f | }d|iW S  ty, } ztdt|dd }~ww )NT
dictionaryz
            SELECT * FROM goal_templates 
            WHERE is_active = 1 AND session_id = %s 
            ORDER BY display_order ASC
        	templates  status_codedetail)cursorexecutefetchall	Exceptionr   str)r   db_connr'   sqlr"   er   r   r   get_goal_templates   s   
r/   z
/start-dayrequestc                 C   s  z|j dd}t d}d}||| j|f | }d }d}d}|r2|d }|d }|d	 }nd
}	||	| j|f |j}d}
||
| jf | }|rT|d nd }|d|f | d }|dkrd}||| jf | }d}|D ]}||||d |d |d |d |d f qy|	  t
d|  d}|||f | }|d|f | }d|||||r|d nd |dW S  ty } z|  tdt|dd }~ww )NTr    %Y-%m-%dz
            SELECT id, total_status, is_report_submitted 
            FROM daily_plans 
            WHERE session_id = %s AND date = %s
        u	   進行中r   idtotal_statusis_report_submitteduU   INSERT INTO daily_plans (session_id, date, total_status) VALUES (%s, %s, '進行中')z
            SELECT boss_comment 
            FROM daily_plans 
            WHERE session_id = %s 
              AND boss_comment IS NOT NULL 
              AND boss_comment != ''
            ORDER BY date DESC 
            LIMIT 1
        boss_commentz4SELECT COUNT(*) as cnt FROM goals WHERE plan_id = %scntz
                SELECT * FROM goal_templates 
                WHERE is_active = 1 AND session_id = %s 
                ORDER BY display_order ASC
            z
                INSERT INTO goals (plan_id, category, title, original_target_count, adjusted_target_count, current_count, unit)
                VALUES (%s, %s, %s, %s, %s, 0, %s)
            categorytitledefault_target_countunitzDEBUG: Goals created for plan uG   SELECT id FROM goals WHERE plan_id = %s AND title = '架電数' LIMIT 1z
            SELECT id, title, original_target_count, adjusted_target_count, current_count, unit 
            FROM goals 
            WHERE plan_id = %s
        zStart successful)messageplan_idr3   r5   r4   main_goal_idgoalsr#   r$   )r'   r   nowstrftimer(   r   fetchone	lastrowidr)   commitprintr*   rollbackr   r+   )r0   r,   r'   
today_date	check_sqlplanr<   current_statusr4   insert_plan_sqlcomment_sqlrecent_comment_rowr5   
goal_counttemplate_sqlr"   insert_goal_sqltget_main_goal_sql	main_goalcurrent_goalsr.   r   r   r   	start_day%   st   
		
rT   z	/check-in)response_modelrequest_datac              
   C   ^   z	t || }|W S  ty } ztdt|dd }~w ty. } ztdddd }~ww )Ni  r$   r#   6   サーバー内部でエラーが発生しました。)r   process_30min_checkin
ValueErrorr   r+   r*   rV   r,   resultver.   r   r   r   submit_checkin      r^   z/morning-assessmentc              
   C   rW   )Ni  r$   r#   rX   )r   evaluate_morning_motivationrZ   r   r+   r*   r[   r   r   r   assess_morning   r_   ra   z/morning-reflectionc              
   C   8   z	t || }|W S  ty } ztdddd }~ww )Nr#   rX   r$   )r   save_morning_reflectionr*   r   rV   r,   r\   r.   r   r   r   submit_morning_reflection      re   z/end-dayc              
   C   rb   Nr#   zServer Errorr$   )r   finish_day_and_get_reportr*   r   rd   r   r   r   
finish_day   rf   ri   z/sales-reportc              
   C   4   zt || W S  ty } ztdddd }~ww rg   )r   save_sales_reportr*   r   rV   r,   r.   r   r   r   submit_sales_report      rm   z/boss/reports/{session_id}c              
   C   8   zt || W S  ty } ztdt|dd }~ww Nr#   r$   r   get_boss_daily_reportsr*   r   r+   r   r,   r.   r   r   r   get_boss_reports      rt   z/Report/boss-commentc              
   C   rj   rg   )r   save_boss_commentr*   r   rl   r   r   r   submit_boss_comment   rn   rw   z/statusc              
   C   s   z-|j dd}t d}d}||| |f | }|r(|d |d dW S dd dW S  tyA } ztd	t|d
d }~ww )NTr    r1   zVSELECT total_status, boss_comment FROM daily_plans WHERE session_id = %s AND date = %sr3   r5   )r3   r5   zNot Startedr#   r$   )	r'   r   r?   r@   r(   rA   r*   r   r+   )r   r,   r'   rF   r-   r\   r.   r   r   r   get_today_status   s   rx   z/counseling/chatc              
   C   ro   rp   )r   process_counseling_messager*   r   r+   rl   r   r   r   counseling_chat   ru   rz   z/final-review/analyzec              
   C   8   zt || W S  ty } ztdt|dd}~ww )ug   
    제출된 영업일지(항목별 회고)와 성과를 바탕으로 AI 분석 코멘트 생성
    r#   r$   N)r   generate_final_ai_reviewr*   r   r+   rl   r   r   r   analyze_daily_report      r}   z/final-review/submitc              
   C   r{   )uA   
    유저의 최종 총평과 AI 코멘트를 DB에 저장
    r#   r$   N)r   save_final_reviewr*   r   r+   rl   r   r   r   submit_final_review   r~   r   z/counseling/finishc              
   C   r{   )uN   
    오전 상담 종료 시, 대화 내용을 요약하여 DB에 저장
    r#   r$   N)r   summarize_morning_counselingr*   r   r+   rl   r   r   r   finish_counseling   r~   r   z/history/{session_id}c              
   C   r{   )uF   
    유저가 자신의 과거 일지 기록을 조회하는 API
    r#   r$   Nrq   rs   r   r   r   get_user_history  s   r   z!/progress/goal-rates/{session_id}c              
   C   s6   zt | W S  ty } ztdt|dd}~ww )u   
    프론트엔드에서 엑셀 다운로드 후 '아니오' 클릭 시,
    Sales_C_DB의 T_daily 테이블에서 팀의 항목별 달성률을 조회하는 API
    r#   r$   N)r   get_team_goal_ratesr*   r   r+   )r   r.   r   r   r   get_goal_rates  s   r   N).fastapir   r   r   pydanticr   r   app.schemas.today_goal_schemar   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   
app.modelsr   routerr   getr+   r/   postrT   r^   ra   re   ri   rm   rt   rw   rx   rz   r}   r   r   r   r   r   r   r   r   <module>   sT    De			

