// Banner 模块：首页轮播图接口
package banner

import (
	"com.sclktx/m/v2/internal/common/model"
	"com.sclktx/m/v2/internal/common/response"

	"github.com/gin-gonic/gin"
	"gorm.io/gorm"
)

// BannerHandler Banner 处理器
type BannerHandler struct {
	db *gorm.DB
}

// NewBannerHandler 创建 Banner 处理器
func NewBannerHandler(db *gorm.DB) *BannerHandler {
	return &BannerHandler{db: db}
}

// BannerVO Banner 视图对象（只返回前端需要的字段）
type BannerVO struct {
	ImageURL string `json:"image_url"` // 图片地址
	JumpPath string `json:"jump_path"` // 跳转链接（空字符串表示不可跳转）
	IsJump   bool   `json:"is_jump"`   // 是否可跳转
}

// @Summary      获取首页轮播图列表
// @Description  获取首页轮播图列表（公开接口）
// @Tags         公共
// @Accept       json
// @Produce      json
// @Success      200  {object}  response.Response{data=[]banner.BannerVO}  "success"
// @Router       /api/v1/banners [get]
// GetBanners 获取首页轮播图列表（公开接口）
func (h *BannerHandler) GetBanners(c *gin.Context) {
	var banners []model.Banner
	if err := h.db.Where("is_valid = ?", true).
		Order("sort ASC, id DESC").
		Find(&banners).Error; err != nil {
		response.InternalError(c, "查询失败")
		return
	}

	result := make([]BannerVO, 0, len(banners))
	for _, b := range banners {
		result = append(result, BannerVO{
			ImageURL: b.ImageURL,
			JumpPath: b.JumpPath,
			IsJump:   b.IsJump,
		})
	}

	// 如果没有数据，返回空数组而非 null
	if result == nil {
		result = []BannerVO{
			{
				ImageURL: "//mmbiz.qpic.cn/mmbiz_jpg/XekA4rfc3lcLOadSAicKvm3ZXFgn9TtZUOh5tSgaJeQrqs6JhWKfszMHBQhXaicPpgVM09U3dnHBfoEriaM9fKPXYCDvsB2fiaib4TAjXMGV2Ql0/0?from=appmsg",
				JumpPath: "",
				IsJump:   false,
			},
		}
	}

	response.Success(c, result)
}

// NoticeVO 通知视图对象
type NoticeVO struct {
	ID      uint   `json:"id"`
	Title   string `json:"title"`
	Content string `json:"content"`
}

// @Summary      获取有效通知列表
// @Description  获取有效通知列表（公开接口）
// @Tags         公共
// @Accept       json
// @Produce      json
// @Success      200  {object}  response.Response{data=[]banner.NoticeVO}  "success"
// @Router       /api/v1/notices [get]
// GetNotices 获取有效通知列表（公开接口）
func (h *BannerHandler) GetNotices(c *gin.Context) {
	var notices []model.Notice
	h.db.Where("is_valid = ?", true).Order("sort ASC, id DESC").Find(&notices)

	result := make([]NoticeVO, 0, len(notices))
	for _, n := range notices {
		result = append(result, NoticeVO{
			ID:      n.ID,
			Title:   n.Title,
			Content: n.Content,
		})
	}
	if result == nil {
		result = []NoticeVO{}
	}

	response.Success(c, result)
}

// RegisterRoutes 注册 Banner 路由（公开接口，无需认证）
func (h *BannerHandler) RegisterRoutes(r *gin.RouterGroup) {
	r.GET("/banners", h.GetBanners)
	r.GET("/notices", h.GetNotices)
}
