
    Ui#                     :   d dl mZmZmZ d dlZd dlmZmZ d dl	m
Z
 ddededee         dee         d	ef
d
Zded	ee         fdZded	ee         fdZded	efdZdeded	efdZ	 ddededededee         dee         fdZddedee         dee         fdZdS )    )OptionalListDictN)CHAT_LOG_DB_CONFIGlogger)get_current_daily
session_idcategorytitledailyreturnc                    |A	 t          |           }n0# t          $ r#}t          j        d|            d}Y d}~nd}~ww xY w|/dddddd	d
dddddddd}|                    ||          }d| d| }d}	 t          j        j        di t          }|	                                }d}	|
                    |	| |||f           |                                 |j        }
|                                 t          j        d|
 d|            |
|r|                                 S S # t          $ r}t          j        d|             d}~ww xY w# |r|                                 w w xY w)u=   
    새 채팅 세션 생성 → chat_session_id 반환
    N![chat_log] Error fetching daily: r   u   コンディションu   振り返り日記u   カリキュラムu   目標探しu
   MBTI診断u   IT学習u	   SPI対策u   自己PRu   面接練習u	   クイズu   一般会話u   サマリーu   学習計画u   会社情報)	conditionjournal
curriculumfindgoalmbtiitspiselfpr	interviewquizgeneralsummary	studyplancompany_infozDay z - zx
            INSERT INTO chat_sessions (session_id, title, category, daily)
            VALUES (%s, %s, %s, %s)
        z[chat_log] Created session #: z&[chat_log] create_chat_session Error:  )r   	Exceptionr   errorgetmysql	connectorconnectr   cursorexecutecommit	lastrowidcloseinfo)r	   r
   r   r   ecategory_namescat_nameconnr&   sqlchat_session_ids              "/app/app/models/chat_log_module.pycreate_chat_sessionr3      s    }	%j11EE 	 	 	L@Q@@AAAEEEEEE	 } 1+.&  '%%'*
 
  "%%h99+u++++D&<<);<< 	sZ%@AAA *M?MMeMMNNN
  	JJLLLL		    AaAABBB  	JJLLLL	s7    
A<A8BD% %
E/EEE E(c                    d}	 t          j        j        di t          }|                    d          }d}|                    || f           |                                }|                                 ||r|                                 S S # t          $ r:}t          j
        d|            g cY d}~|r|                                 S S d}~ww xY w# |r|                                 w w xY w)u;   
    유저의 채팅 세션 목록 조회 (최신순)
    NT
dictionaryz
            SELECT id, session_id, title, category, daily, started_at, last_message_at
            FROM chat_sessions
            WHERE session_id = %s
            ORDER BY last_message_at DESC
        z$[chat_log] get_chat_sessions Error: r   r#   r$   r%   r   r&   r'   fetchallr*   r    r   r!   )r	   r/   r&   r0   rowsr,   s         r2   get_chat_sessionsr:   A   s    D&<<);<<-- 	sZM***  
  	JJLLLL		    ?A??@@@					 	JJLLLL		  	JJLLLL	0   A3B 
CC1C2C CC C/r1   c                    d}	 t          j        j        di t          }|                    d          }d}|                    || f           |                                }|                                 ||r|                                 S S # t          $ r:}t          j
        d|            g cY d}~|r|                                 S S d}~ww xY w# |r|                                 w w xY w)u7   
    특정 세션의 메시지 조회 (시간순)
    NTr5   z
            SELECT id, session_id, log, sender, daily, category, created_at
            FROM chat_messages
            WHERE chat_session_id = %s
            ORDER BY created_at ASC
        z'[chat_log] get_session_messages Error: r   r7   )r1   r/   r&   r0   r9   r,   s         r2   get_session_messagesr=   [   s    D&<<);<<-- 	s_.///  
  	JJLLLL		    BqBBCCC					 	JJLLLL		  	JJLLLL	r;   c                 <   d}	 t          j        j        di t          }|                                }|                    d| f           |                    d| f           |                                 |                                 t          j	        d|             	 |r|                                 dS dS # t          $ r:}t          j        d|            Y d}~|r|                                 dS dS d}~ww xY w# |r|                                 w w xY w)	u*   
    세션 + 해당 메시지 삭제
    Nz4DELETE FROM chat_messages WHERE chat_session_id = %sz'DELETE FROM chat_sessions WHERE id = %sz[chat_log] Deleted session #Tz&[chat_log] delete_chat_session Error: Fr   )r#   r$   r%   r   r&   r'   r(   r*   r   r+   r    r!   )r1   r/   r&   r,   s       r2   delete_chat_sessionr?   u   sH    D&<<);<<MP_Oabbb@?BTUUUD?DDEEE
  	JJLLLLL	 		    AaAABBBuuu 	JJLLLLL	 		  	JJLLLL	s*   BB; ;
C?C:D :C??D Dc                    d}	 t          j        j        di t          }|                                }d}|                    ||| f           |                                 |                                 	 |r|                                 dS dS # t          $ r:}t          j
        d|            Y d}~|r|                                 dS dS d}~ww xY w# |r|                                 w w xY w)u$   
    세션 제목 업데이트
    Nz1UPDATE chat_sessions SET title = %s WHERE id = %sTz'[chat_log] update_session_title Error: Fr   )r#   r$   r%   r   r&   r'   r(   r*   r    r   r!   )r1   r   r/   r&   r0   r,   s         r2   update_session_titlerA      s    D&<<);<<AsUO4555
  	JJLLLLL	 		    BqBBCCCuuu 	JJLLLLL	 		  	JJLLLL	s*   A1B 
CC1C CC C0logsenderc           	         |[	 t          |           }t          j        d|  d|            n0# t          $ r#}t          j        d|            d}Y d}~nd}~ww xY wd}	 t          j        j        di t          }|	                                }	 d}	|
                    |	| |||||f           nd# t
          j        j        $ rM}
dt          |
          v r1dt          |
          v r d	}	|
                    |	| ||||f           d}n Y d}
~
nd}
~
ww xY w|                                 |rS|	                                }|
                    d
|f           |                                 |                                 |                                 n*# t          $ r}t          j        d|             d}~ww xY w	 |r|                                 dS dS # |r|                                 w w xY w)u  
    chat_messages 테이블에 대화 로그 저장
    - session_id: 유저 세션 ID
    - log: 대화 내용
    - sender: 발화자 (M=User, I=AI 등)
    - category: 카테고리 (condition, journal, curriculum, findgoal, mbti, it, spi 등)
    - daily: 일차 (optional, None이면 Goalskill_DB에서 가져옴)
    - chat_session_id: 소속 세션 ID (optional, 하위호환)
    Nz%[chat_log] Fetched current daily for r   r   r   z
                INSERT INTO chat_messages (session_id, log, sender, daily, category, chat_session_id)
                VALUES (%s, %s, %s, %s, %s, %s)
            zUnknown columnr1   z
                    INSERT INTO chat_messages (session_id, log, sender, daily, category)
                    VALUES (%s, %s, %s, %s, %s)
                z>UPDATE chat_sessions SET last_message_at = NOW() WHERE id = %sz [chat_log] save_chat_log Error: r   )r   r   r+   r    r!   r#   r$   r%   r   r&   r'   Errorstrr(   r*   )r	   rB   rC   r
   r   r1   r,   r/   r&   r0   pecursor2s               r2   save_chat_logrI      sc    }	%j11EKU
UUeUUVVVV 	 	 	L@Q@@AAAEEEEEE	 D*&<<);<<	C NN3S&%? [\\\\$ 	 	 	3r77**/@CGG/K/K sZfeX$NOOO"&  	 	  	kkmmGOOP "   KKMMMMMOOO   ;;;<<< 	
  	JJLLLLL	 	4 	JJLLLL	sj   ). 
AAA!/F B0 /F 0DADF DB F G 
F9F44F99G G0c                    d}	 t          j        j        di t          }|                    d          }d}dg}| g}|r*|                    d           |                    |           |*|                    d           |                    |           |dd	                    |          z   z  }|d
z  }|                    |t          |                     |	                                }|
                                 ||r|
                                 S S # t          $ r:}	t          j        d|	            g cY d}	~	|r|
                                 S S d}	~	ww xY w# |r|
                                 w w xY w)u   
    chat_messages 테이블에서 대화 로그 조회 (기존 호환)
    - session_id: 유저 세션 ID
    - category: 카테고리 필터 (optional)
    - daily: 일차 필터 (optional)
    NTr5   zRSELECT id, session_id, log, sender, daily, category, created_at FROM chat_messageszsession_id = %szcategory = %sz
daily = %sz WHERE z AND z ORDER BY created_at ASCz [chat_log] get_chat_logs Error: r   )r#   r$   r%   r   r&   appendjoinr'   tupler8   r*   r    r   r!   )
r	   r
   r   r/   r&   r0   
conditionsparamsr9   r,   s
             r2   get_chat_logsrP      s    D&<<);<<--b'(
 	$o...MM(###l+++MM%   y7<<
3333))sE&MM***  
  	JJLLLL		    ;;;<<<					 	JJLLLL		  	JJLLLL	s0   C=D 
E#E;E<E  EE   E9)NN)typingr   r   r   mysql.connectorr#   app.core.configr   r   app.models.goalskill_moduler   rF   intr3   r:   r=   boolr?   rA   rI   rP   r       r2   <module>rX      s   ' ' ' ' ' ' ' ' ' '     6 6 6 6 6 6 6 6 9 9 9 9 9 93 3C 33 3x} 3\deh\i 3ux 3 3 3 3l# $t*    4# $t*    4     0# c d    4 QU> >c > >S >C >!#>@H> > > >B# #c #Xc] #(SV- # # # # # #rW   