# src/models/gif_feedback.py
from src.models.db import db
from datetime import datetime, timezone

class GifFeedback(db.Model):
    """GIF 피드백 모델"""
    __tablename__ = 'gif_feedback'
    
    id = db.Column(db.Integer, primary_key=True)
    gif_id = db.Column(db.String(255), nullable=False, comment='GIF ID')
    gif_title = db.Column(db.String(500), nullable=True, comment='GIF 제목')
    gif_url = db.Column(db.Text, nullable=False, comment='GIF URL')
    user_id = db.Column(db.String(20), nullable=True, comment='User.user_id (선택)')
    session_id = db.Column(db.String(255), nullable=True, comment='세션 ID (비로그인 사용자용)')
    feedback_type = db.Column(db.Enum('like', 'dislike', 'funny', 'useful', 'inappropriate'), nullable=False, comment='피드백 타입')
    rating = db.Column(db.Integer, nullable=True, comment='평점 (1-5)')
    comment = db.Column(db.Text, nullable=True, comment='댓글')
    created_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc), comment='생성일시')
    updated_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc), onupdate=lambda: datetime.now(timezone.utc), comment='수정일시')
    
    # 관계 설정
    # try:
    # # User 모델이 있는 경우에만 관계 설정
    #     user = db.relationship('User', backref='gif_feedbacks')
    # except:
    #     # User 모델이 없는 경우 관계 설정 없이 진행
    #     pass
    
    def to_dict(self):
        return {
            'id': self.id,
            'gif_id': self.gif_id,
            'gif_title': self.gif_title,
            'gif_url': self.gif_url,
            'user_id': self.user_id,
            'session_id': self.session_id,
            'feedback_type': self.feedback_type,
            'rating': self.rating,
            'comment': self.comment,
            'created_at': self.created_at.isoformat() if self.created_at else None,
            'updated_at': self.updated_at.isoformat() if self.updated_at else None
        }

class GifUsage(db.Model):
    """GIF 사용 통계 모델"""
    __tablename__ = 'gif_usage'
    
    id = db.Column(db.Integer, primary_key=True)
    gif_id = db.Column(db.String(255), nullable=False, comment='GIF ID')
    gif_title = db.Column(db.String(500), nullable=True, comment='GIF 제목')
    gif_url = db.Column(db.Text, nullable=False, comment='GIF URL')
    user_id = db.Column(db.String(20), nullable=True, comment='User.user_id')
    session_id = db.Column(db.String(255), nullable=True, comment='세션 ID')
    usage_type = db.Column(db.Enum('sent', 'viewed', 'shared'), nullable=False, comment='사용 타입')
    context = db.Column(db.String(100), nullable=True, comment='사용 맥락 (chat, comment, etc.)')
    created_at = db.Column(db.DateTime, default=lambda: datetime.now(timezone.utc), comment='생성일시')
    
    # 관계 설정
    # try:
    # # User 모델이 있는 경우에만 관계 설정
    #     user = db.relationship('User', backref='gif_feedbacks')
    # except:
    #     # User 모델이 없는 경우 관계 설정 없이 진행
    #     pass
    
    def to_dict(self):
        return {
            'id': self.id,
            'gif_id': self.gif_id,
            'gif_title': self.gif_title,
            'gif_url': self.gif_url,
            'user_id': self.user_id,
            'session_id': self.session_id,
            'usage_type': self.usage_type,
            'context': self.context,
            'created_at': self.created_at.isoformat() if self.created_at else None
        } 