package cache

import (
	"sync"
	"time"

	"metazone.cc/metalab/internal/model"
)

// HomePageCache 首页内存缓存，30 秒 TTL，创建/更新/删除/审核通过时失效
type HomePageCache struct {
	mu      sync.RWMutex
	posts   []model.Post
	total   int64
	expires time.Time
	ttl     time.Duration
}

// NewHomePageCache 创建首页缓存，ttl 为缓存有效期
func NewHomePageCache(ttl time.Duration) *HomePageCache {
	return &HomePageCache{ttl: ttl}
}

// Get 返回缓存数据，ok=false 表示缓存未命中或已过期
func (c *HomePageCache) Get() (posts []model.Post, total int64, ok bool) {
	c.mu.RLock()
	defer c.mu.RUnlock()
	if time.Now().After(c.expires) {
		return nil, 0, false
	}
	// 返回浅拷贝以防止调用方修改缓存内部数据
	copied := make([]model.Post, len(c.posts))
	copy(copied, c.posts)
	return copied, c.total, true
}

// Set 写入缓存数据
func (c *HomePageCache) Set(posts []model.Post, total int64) {
	c.mu.Lock()
	defer c.mu.Unlock()
	// 深拷贝一份避免外部修改影响缓存
	c.posts = make([]model.Post, len(posts))
	copy(c.posts, posts)
	c.total = total
	c.expires = time.Now().Add(c.ttl)
}

// Invalidate 主动失效缓存
func (c *HomePageCache) Invalidate() {
	c.mu.Lock()
	defer c.mu.Unlock()
	c.posts = nil
	c.total = 0
	c.expires = time.Time{}
}
