package models

import "time"

type Session struct {
	SessionID            string              `gorm:"column:session_id;type:varchar(255);primaryKey"`
	AgentID              string              `gorm:"column:agent_id;type:varchar(64);not null"`
	AgentSessionID       string              `gorm:"column:agent_session_id;type:varchar(255)"`
	ActiveTurnID         string              `gorm:"column:active_turn_id;type:varchar(255)"`
	SourceType           string              `gorm:"column:source_type;type:varchar(64);not null;uniqueIndex:idx_agent_gateway_sessions_source"`
	SourceInstanceID     string              `gorm:"column:source_instance_id;type:varchar(255);not null;uniqueIndex:idx_agent_gateway_sessions_source"`
	SourceSessionKey     string              `gorm:"column:source_session_key;type:varchar(255);not null;uniqueIndex:idx_agent_gateway_sessions_source"`
	SourceInitiatorEmail string              `gorm:"column:source_initiator_email;type:varchar(320);not null"`
	LarkContext          *LarkSessionContext `gorm:"foreignKey:SessionID;references:SessionID"`
	Status               string              `gorm:"column:status;type:varchar(64);not null"`
	CreatedAt            time.Time           `gorm:"column:created_at;precision:3;not null"`
	UpdatedAt            time.Time           `gorm:"column:updated_at;precision:3;not null"`
}

func (Session) TableName() string {
	return "agent_gateway_sessions"
}

type LarkSessionContext struct {
	SessionID       string `gorm:"column:session_id;type:varchar(255);primaryKey"`
	ChatID          string `gorm:"column:chat_id;type:varchar(255);index"`
	ThreadID        string `gorm:"column:thread_id;type:varchar(255);index"`
	AnchorMessageID string `gorm:"column:anchor_message_id;type:varchar(255);index"`
	EntryMessageID  string `gorm:"column:entry_message_id;type:varchar(255);index"`
}

func (LarkSessionContext) TableName() string {
	return "agent_gateway_lark_session_contexts"
}
