o
    i!                     @   s   d dl Zd dlmZmZmZ d dlmZmZ edZ	d!de
dede
dee fd	d
Zde
dede
dede
de
de
fddZde
de
de
de
fddZde
defddZde
de
dee fddZde
dee fddZde
dee fddZde
fdd ZdS )"    N)ListDictOptional)get_db_configlogger
Sales_A_DB
session_idquestion_idselected_option
is_correctc              
   C   s   d}zDz-t jjdi t}| }d}||| |||f |  |jW W |r0|  |  S S  t	yF } z
t
d|  |d}~ww |rR|  |  w w )u   
    SPI 답변 저장 (spi_log 테이블)
    
    Args:
        session_id: 세션 ID
        question_id: 문제 ID
        selected_option: 선택한 답변
        is_correct: 정답 여부 (능력검사만, 성격검사는 None)
    Nz
            INSERT INTO spi_log 
            (session_id, question_id, selected_option, is_correct)
            VALUES (%s, %s, %s, %s)
        zSPI Answer Save Error:  )mysql	connectorconnectA_DB_CONFIGcursorexecutecommit	lastrowidclose	Exceptionr   error)r   r	   r
   r   connr   sqler   r   7/home/air/goalskill_sales/back/app/models/spi_module.pysave_answer   s*   


r   language_scorelanguage_gradenonverbal_scorenonverbal_gradepersonality_scorepersonality_typec              
   C   s   d}zWz1t jjdi t}| }d}	||	| ||||||f |  td|   t	| ||| W n t
yJ }
 z
td|
  |
d}
~
ww W |rX|  |  dS dS |re|  |  w w )u   
    personality_score: 性格特性の個別スコアJSON文字列
    personality_type: AI コメント（日本語テキスト）
    Nar  
            INSERT INTO spi_Output 
            (session_id, language_score, language_grade, nonverbal_score, nonverbal_grade, 
             personality_score, personality_type)
            VALUES (%s, %s, %s, %s, %s, %s, %s)
            ON DUPLICATE KEY UPDATE
                language_score = VALUES(language_score),
                language_grade = VALUES(language_grade),
                nonverbal_score = VALUES(nonverbal_score),
                nonverbal_grade = VALUES(nonverbal_grade),
                personality_score = VALUES(personality_score),
                personality_type = VALUES(personality_type)
        zSPI Output saved for session: zSPI Output Save Error: r   )r   r   r   r   r   r   r   r   infosync_to_user_profile_summaryr   r   r   )r   r   r   r   r    r!   r"   r   r   r   r   r   r   r   save_or_update_output1   s<   
r%   c              
   C   s   d}zQz't jjdi t}| }d}||| |||f |  td|   W n t	yD } zt
d|  W Y d}~nd}~ww W |rR|  |  dS dS |r_|  |  w w )u=   SPI 완료 시 user_profile_summary 테이블에도 동기화Na  
            INSERT INTO user_profile_summary
            (session_id, spi_language, spi_nonverbal, spi_personality)
            VALUES (%s, %s, %s, %s)
            ON DUPLICATE KEY UPDATE
                spi_language = VALUES(spi_language),
                spi_nonverbal = VALUES(spi_nonverbal),
                spi_personality = VALUES(spi_personality),
                updated_at = NOW()
        z0SPI synced to user_profile_summary for session: zSPI Summary Sync Error: r   r   r   r   r   r   r   r   r   r#   r   r   r   )r   r   r    r"   r   r   r   r   r   r   r   r$   e   s*   

r$   returnc              
   C   s   d}zXz/t jjdi t}| }d}||| f | }|r$|d ndW W |r2|  |  S S  tyZ } zt	
d|  W Y d}~W |rT|  |  dS dS d}~ww |rf|  |  w w )u"   현재 답변한 문제 수 조회Nz2SELECT COUNT(*) FROM spi_log WHERE session_id = %sr   zSPI Answer Count Error: r   r   r   r   r   r   r   fetchoner   r   r   r   r   r   r   r   resultr   r   r   r   get_answer_count   s2   

r,   question_typec           	   
   C   s  d}zzWt jjdi t}|jdd}|dkrd\}}n!|dkr%d\}}n|dkr.d	\}}ng W W |r<|  |  S S d
}||| ||f | }|W W |rZ|  |  S S  ty } zt	
d|  g W  Y d}~W |r}|  |  S S d}~ww |r|  |  w w )u   
    타입별 답변 조회
    
    Args:
        session_id: 세션 ID
        question_type: 'language' (1-5), 'nonverbal' (6-10), 'personality' (11-20)
    
    Returns:
        답변 리스트
    NT
dictionarylanguage)      	nonverbal)   
   personality)      z
            SELECT question_id, selected_option, is_correct
            FROM spi_log
            WHERE session_id = %s AND question_id BETWEEN %s AND %s
            ORDER BY question_id
        zSPI Answers by Type Error: r   )r   r   r   r   r   r   r   fetchallr   r   r   )	r   r-   r   r   min_idmax_idr   resultsr   r   r   r   get_answers_by_type   sH   






r=   c              
   C   s   d}zTz+t jjdi t}|jdd}d}||| f | }|W W |r.|  |  S S  tyV } zt	
d|  g W  Y d}~W |rQ|  |  S S d}~ww |rb|  |  w w )u   전체 답변 조회NTr.   z
            SELECT question_id, selected_option, is_correct
            FROM spi_log
            WHERE session_id = %s
            ORDER BY question_id
        zSPI All Answers Error: r   )r   r   r   r   r   r   r9   r   r   r   r   )r   r   r   r   r<   r   r   r   r   get_all_answers   s2   


r>   c              
   C   s   d}zTz+t jjdi t}|jdd}d}||| f | }|W W |r.|  |  S S  tyV } zt	
d|  W Y d}~W |rP|  |  dS dS d}~ww |rb|  |  w w )u   SPI 최종 결과 조회NTr.   z.SELECT * FROM spi_Output WHERE session_id = %szSPI Output Get Error: r   r(   r*   r   r   r   
get_output   s2   

r?   c              
   C   s   d}zNz$t jjdi t}| }d}||| f |  td|   W n t	yA } zt
d|  W Y d}~nd}~ww W |rO|  |  dS dS |r\|  |  w w )uE   
    테스트 시작 시 이전 기록 초기화 (재시작용)
    Nz)DELETE FROM spi_log WHERE session_id = %szSPI Session Cleared: zSPI Session Clear Error: r   r&   )r   r   r   r   r   r   r   r   clear_session_logs  s(   
r@   )N)mysql.connectorr   typingr   r   r   app.core.configr   r   r   strintboolr   r%   r$   r,   r=   r>   r?   r@   r   r   r   r   <module>   s0    &

4
$/