package model

import (
	"encoding/json"
	"time"

	"gorm.io/gorm"
)

// CaptainDocument represents a knowledge document for Captain AI.
// Reference: Chatwoot CaptainDocument model + P2B M10 spec
type CaptainDocument struct {
	ID            uint           `gorm:"primaryKey" json:"id"`
	AssistantID   uint           `gorm:"not null;index" json:"assistant_id"`
	ExternalURL   string         `gorm:"size:512" json:"external_url"`
	Content       string         `gorm:"type:text" json:"content"`
	Embedding     []float64      `gorm:"type:vector(1536)" json:"embedding"`
	Source        string         `gorm:"size:100" json:"source"` // upload/url/crawl
	Status        string         `gorm:"size:50;default:'processing'" json:"status"` // processing/ready/error
	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"`

	Assistant CaptainAssistant `gorm:"foreignKey:AssistantID" json:"assistant,omitempty"`
}

func (CaptainDocument) TableName() string { return "captain_documents" }