package models

import (
    "time"
)

type ChatMessage struct {
    ID              uint           `gorm:"primaryKey" json:"id"`
    UserID          uint           `gorm:"not null" json:"user_id"`
    User            User           `gorm:"foreignKey:UserID" json:"user,omitempty"`
    Message         string         `gorm:"type:text;not null" json:"message"`
    Response        string         `gorm:"type:text;not null" json:"response"`
    ContextData     string         `gorm:"type:json" json:"context_data"`
    Intent          string         `gorm:"type:varchar(50)" json:"intent"`
    ConfidenceScore float64        `gorm:"type:decimal(5,2);default:0.00" json:"confidence_score"`
    CreatedAt       time.Time      `json:"created_at"`
}

func (ChatMessage) TableName() string {
    return "chat_messages"
}

// Intent types
const (
    IntentSearchItem    = "search_item"
    IntentReportLost    = "report_lost"
    IntentClaimHelp     = "claim_help"
    IntentGeneral       = "general"
    IntentRecommendItem = "recommend_item"
)

type ChatMessageResponse struct {
    ID              uint      `json:"id"`
    Message         string    `json:"message"`
    Response        string    `json:"response"`
    Intent          string    `json:"intent"`
    ConfidenceScore float64   `json:"confidence_score"`
    CreatedAt       time.Time `json:"created_at"`
}

func (c *ChatMessage) ToResponse() ChatMessageResponse {
    return ChatMessageResponse{
        ID:              c.ID,
        Message:         c.Message,
        Response:        c.Response,
        Intent:          c.Intent,
        ConfidenceScore: c.ConfidenceScore,
        CreatedAt:       c.CreatedAt,
    }
}