package model

import (
	"time"

	"gorm.io/gorm"
)

// Post 帖子/文章模型
type Post struct {
	ID           uint           `gorm:"primarykey" json:"id"`
	Title        string         `gorm:"type:varchar(200);not null" json:"title"`
	Body         string         `gorm:"type:text" json:"body"`            // Markdown content
	Excerpt      string         `gorm:"type:varchar(500)" json:"excerpt"` // plain text summary for list
	UserID       uint           `gorm:"index;index:idx_posts_user_status,priority:1;not null" json:"user_id"`
	Status       string         `gorm:"type:varchar(20);index;index:idx_posts_user_status,priority:2;default:draft;not null" json:"status"`
	IsLocked     bool           `gorm:"default:false" json:"is_locked"`
	LockReason   string         `gorm:"type:varchar(500);default:''" json:"lock_reason,omitempty"`
	PendingTitle string         `gorm:"type:varchar(200);default:''" json:"pending_title,omitempty"`
	PendingBody  string         `gorm:"type:text" json:"pending_body,omitempty"`
	RejectReason string         `gorm:"type:varchar(500);default:''" json:"reject_reason,omitempty"`
	AllowComment        bool           `gorm:"default:true" json:"allow_comment"`
	CommentsCount       int            `gorm:"default:0" json:"comments_count"`        // 评论数（冗余计数器）
	TotalEnergyReceived int            `gorm:"default:0" json:"total_energy_received"` // 文章累计被赋能域能（乘10，冗余计数）
	LikesCount          int            `gorm:"default:0" json:"likes_count"`           // 点赞数（冗余计数器）
	DislikesCount       int            `gorm:"default:0" json:"dislikes_count"`        // 踩数（冗余计数器，仅后台可见）
	FavoritesCount      int            `gorm:"default:0" json:"favorites_count"`       // 收藏数（冗余计数器）
	ViewsCount          int            `gorm:"default:0" json:"views_count"`            // 阅读数（冗余计数器，已登录去重）
	DeletedAt           gorm.DeletedAt `gorm:"index" json:"-"`
	CreatedAt           time.Time      `json:"created_at"`
	UpdatedAt           time.Time      `json:"updated_at"`

	// 非数据库字段（联表查询填充）
	// gorm:"-:migration" 指定不创建/迁移该列，"<-:false" 禁止写入，"column:author_name" 允许
	// 从 JOIN 查询的 users.username AS author_name 别名中读取
	AuthorName string `gorm:"-:migration;<-:false;column:author_name" json:"author_name,omitempty"`
}

// 帖子状态常量
const (
	PostStatusDraft    = "draft"
	PostStatusPending  = "pending"
	PostStatusApproved = "approved"
	PostStatusRejected = "rejected"
	PostStatusLocked   = "locked"
)
