package model

import (
	"encoding/json"
	"time"

	"gorm.io/gorm"
)

// CaptainAssistantResponse represents an AI response in a conversation.
// Reference: P2B M10 spec
type CaptainAssistantResponse struct {
	ID             uint           `gorm:"primaryKey" json:"id"`
	AccountID      uint           `gorm:"not null;index" json:"account_id"`
	ConversationID uint           `gorm:"not null;index" json:"conversation_id"`
	AssistantID    uint           `gorm:"not null;index" json:"assistant_id"`
	MessageID      *uint          `gorm:"index" json:"message_id,omitempty"`
	Content        string         `gorm:"type:text" json:"content"`
	Source         string         `gorm:"size:50" json:"source"` // suggestion/auto_reply
	Status         string         `gorm:"size:50;default:'suggested'" json:"status"` // suggested/dismissed/accepted
	Metadata       json.RawMessage `gorm:"type:jsonb" json:"metadata"`
	CreatedAt      time.Time      `gorm:"autoCreateTime" json:"created_at"`
	UpdatedAt      time.Time      `gorm:"autoUpdateTime" json:"updated_at"`
	DeletedAt      gorm.DeletedAt `gorm:"index" json:"deleted_at,omitempty"`

	Account      Account            `gorm:"foreignKey:AccountID" json:"account,omitempty"`
	Conversation Conversation       `gorm:"foreignKey:ConversationID" json:"conversation,omitempty"`
	Assistant    CaptainAssistant   `gorm:"foreignKey:AssistantID" json:"assistant,omitempty"`
	Message      *Message           `gorm:"foreignKey:MessageID" json:"message,omitempty"`
}

func (CaptainAssistantResponse) TableName() string { return "captain_assistant_responses" }