package model

import (
	"encoding/json"
	"time"

	"gorm.io/gorm"
)

// Inbox represents a conversation inbox (channel instance).
// Reference: Chatwoot Inbox model + P2B M2 Inbox spec
type Inbox struct {
	ID                              uint           `gorm:"primaryKey" json:"id"`
	AccountID                       uint           `gorm:"not null;index" json:"account_id"`
	Name                            string         `gorm:"size:255;not null" json:"name"`
	ChannelType                     string         `gorm:"size:100;not null;index" json:"channel_type"` // Channel::WebWidget etc.
	AvatarURL                       string         `gorm:"size:512" json:"avatar_url"`
	Greeting                        string         `gorm:"type:text" json:"greeting"`
	GreetingEnabled                 bool           `gorm:"default:false" json:"greeting_enabled"`
	WelcomeMessage                  string         `gorm:"type:text" json:"welcome_message"`
	WelcomeTitle                    string         `gorm:"size:255" json:"welcome_title"`
	CSATEnabled                     bool           `gorm:"default:false" json:"csat_enabled"`
	CSATMessage                     string         `gorm:"type:text" json:"csat_message"`
	AutoAssignmentEnabled           bool           `gorm:"default:true" json:"auto_assignment_enabled"`
	EnableEmailCollect              bool           `gorm:"default:true" json:"enable_email_collect"`
	AgentBotID                      *uint          `gorm:"index" json:"agent_bot_id,omitempty"`
	WorkingHoursEnabled             bool           `gorm:"default:false" json:"working_hours_enabled"`
	OutOfOfficeMessage              string         `gorm:"type:text" json:"out_of_office_message"`
	LockChatDuringOOO               bool           `gorm:"default:false" json:"lock_chat_during_ooo"`
	EmailAddress                    string         `gorm:"size:255" json:"email_address"`
	EnableAutoTopicCreationOnReopen bool           `gorm:"default:false" json:"enable_auto_topic_creation_on_reopen"`
	AllowMessagesAfterResolved      bool           `gorm:"default:true" json:"allow_messages_after_resolved"`
	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"`
	Members       []InboxMember `gorm:"foreignKey:InboxID" json:"members,omitempty"`
	Conversations []Conversation `gorm:"foreignKey:InboxID" json:"conversations,omitempty"`
	AgentBot      *AgentBot     `gorm:"foreignKey:AgentBotID" json:"agent_bot,omitempty"`
}

func (Inbox) TableName() string { return "inboxes" }