package models

type PoolCategory string

const (
	Series     PoolCategory = "series"
	Collection PoolCategory = "collection"
)

type Pool struct {
	BaseModel[PoolID]
	Name     string          `json:"name" gorm:"column:name;type:varchar(25)"`
	Category PoolCategory    `json:"category" gorm:"column:category;type:pool_category;type:enum('series', 'collection')"`
	Posts    []PoolPost      `json:"posts" gorm:"foreignKey:PoolID"`
	Sources  []PoolReference `json:"sources" gorm:"foreignKey:PoolID"`
}

func (Pool) TableName() string {
	return "Pool"
}

type PoolPost struct {
	PoolID        PoolID `json:"pool_id" gorm:"column:pool_id;primaryKey"`
	Pool          Pool   `json:"-"`
	PostID        PostID `json:"post_id" gorm:"column:post_id;primaryKey"`
	OrderPosition int    `json:"order_position" gorm:"column:order_position;default:0"`
}

func (PoolPost) TableName() string {
	return "PoolPost"
}

type PoolReference struct {
	PoolID   PoolID   `json:"pool_id" gorm:"column:pool_id;primaryKey"`
	Pool     Pool     `json:"-"`
	SourceID SourceID `json:"source_id" gorm:"column:source_id;primaryKey"`
	URL      string   `json:"url" gorm:"column:url;primaryKey"`
}

func (PoolReference) TableName() string {
	return "PoolReference"
}