package models

import (
	"gorm.io/datatypes"
	"time"
)

type PostReactInfo struct {
	PostID       uint  `json:"post_id"`
	LikeCount    int64 `json:"like_count"`
	DislikeCount int64 `json:"dislike_count"`
	ReplyCount   int64 `json:"reply_count"`
	RepostCount  int64 `json:"repost_count"`
}

type Post struct {
	BaseModel

	Alias       string                    `json:"alias" gorm:"uniqueIndex"`
	Content     string                    `json:"content"`
	Tags        []Tag                     `json:"tags" gorm:"many2many:post_tags"`
	Categories  []Category                `json:"categories" gorm:"many2many:post_categories"`
	Reactions   []Reaction                `json:"reactions"`
	Replies     []Post                    `json:"replies" gorm:"foreignKey:ReplyID"`
	Attachments datatypes.JSONSlice[uint] `json:"attachments"`
	ReplyID     *uint                     `json:"reply_id"`
	RepostID    *uint                     `json:"repost_id"`
	RealmID     *uint                     `json:"realm_id"`
	ReplyTo     *Post                     `json:"reply_to" gorm:"foreignKey:ReplyID"`
	RepostTo    *Post                     `json:"repost_to" gorm:"foreignKey:RepostID"`
	Realm       *Realm                    `json:"realm"`

	PublishedAt *time.Time `json:"published_at"`

	AuthorID uint    `json:"author_id"`
	Author   Account `json:"author"`

	// Dynamic Calculated Values
	ReplyCount    int64            `json:"reply_count"`
	ReactionCount int64            `json:"reaction_count"`
	ReactionList  map[string]int64 `json:"reaction_list" gorm:"-"`
}