package handlers

import (
	"net/http"

	"github.com/gin-gonic/gin"

	"mengyastore-backend/internal/config"
	"mengyastore-backend/internal/storage"
)

// AdminHandler 持有所有管理员路由所需的依赖。
type AdminHandler struct {
	store      *storage.ProductStore
	cfg        *config.Config
	siteStore  *storage.SiteStore
	orderStore *storage.OrderStore
	chatStore  *storage.ChatStore
}

func NewAdminHandler(store *storage.ProductStore, cfg *config.Config, siteStore *storage.SiteStore, orderStore *storage.OrderStore, chatStore *storage.ChatStore) *AdminHandler {
	return &AdminHandler{store: store, cfg: cfg, siteStore: siteStore, orderStore: orderStore, chatStore: chatStore}
}

// requireAdmin 校验管理员令牌。
// 优先级：X-Admin-Token 请求头 > Authorization 请求头 > ?token 查询参数（旧版兼容）。
func (h *AdminHandler) requireAdmin(c *gin.Context) bool {
	token := c.GetHeader("X-Admin-Token")
	if token == "" {
		token = c.GetHeader("Authorization")
	}
	if token == "" {
		// 兼容旧版客户端的 URL 查询参数回退
		token = c.Query("token")
	}
	if token != "" && token == h.cfg.AdminToken {
		return true
	}
	c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
	return false
}
