package handlers

import (
	"context"
	"net/http"
	"time"

	"go.mongodb.org/mongo-driver/v2/bson"
	"go.mongodb.org/mongo-driver/v2/mongo/options"

	"yh_web/server/config"

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

// GetOfficialSite 获取官网站点 ID
func GetOfficialSite(c *gin.Context) {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	siteID := getOfficialSiteID(ctx)
	c.JSON(http.StatusOK, gin.H{"site_id": siteID})
}

// SetOfficialSiteInput 设置官网站点
type SetOfficialSiteInput struct {
	SiteID string `json:"site_id" binding:"required"`
}

// SetOfficialSite 设置官网站点
func SetOfficialSite(c *gin.Context) {
	var input SetOfficialSiteInput
	if err := c.ShouldBindJSON(&input); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": "请提供 site_id"})
		return
	}

	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()

	coll := config.GetDB(config.DBName).Collection("system_config")
	doc := officialSiteDoc{ID: officialSiteConfigID, SiteID: input.SiteID}
	opts := options.UpdateOne().SetUpsert(true)
	_, err := coll.UpdateOne(ctx, bson.M{"_id": officialSiteConfigID}, bson.M{"$set": doc}, opts)
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
	c.JSON(http.StatusOK, gin.H{"message": "已设为官网站点", "site_id": input.SiteID})
}
