package controller

import (
	"net/http"

	"github.com/QuantumNous/new-api/common"
	"github.com/QuantumNous/new-api/model"
	"github.com/QuantumNous/new-api/service"
	"github.com/QuantumNous/new-api/setting"
	"github.com/QuantumNous/new-api/setting/ratio_setting"

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

func GetGroups(c *gin.Context) {
	groupNames := make([]string, 0)
	for groupName := range ratio_setting.GetGroupRatioCopy() {
		groupNames = append(groupNames, groupName)
	}
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"message": "",
		"data":    groupNames,
	})
}

func GetUserGroups(c *gin.Context) {
	usableGroups := make(map[string]map[string]interface{})
	userGroup := ""
	userId := c.GetInt("id")
	userGroup, _ = model.GetUserGroup(userId, false)
	userUsableGroups := service.GetUserUsableGroups(userGroup)
	subscriptionGroups, err := model.GetSubscriptionDedicatedGroupSet()
	if err != nil {
		common.ApiError(c, err)
		return
	}
	for groupName := range ratio_setting.GetGroupRatioCopy() {
		// UserUsableGroups contains the groups that the user can use
		if desc, ok := userUsableGroups[groupName]; ok {
			_, isSubscriptionGroup := subscriptionGroups[groupName]
			usableGroups[groupName] = map[string]interface{}{
				"ratio":                 service.GetUserGroupRatio(userGroup, groupName),
				"desc":                  desc,
				"is_wallet_usable":      true,
				"is_subscription_group": isSubscriptionGroup,
			}
		} else {
			if _, isSubscriptionGroup := subscriptionGroups[groupName]; isSubscriptionGroup {
				usableGroups[groupName] = map[string]interface{}{
					"ratio":                 service.GetUserGroupRatio(userGroup, groupName),
					"desc":                  setting.GetUsableGroupDescription(groupName),
					"is_wallet_usable":      false,
					"is_subscription_group": true,
				}
			}
		}
	}
	if _, ok := userUsableGroups["auto"]; ok {
		usableGroups["auto"] = map[string]interface{}{
			"ratio":                 "自动",
			"desc":                  setting.GetUsableGroupDescription("auto"),
			"is_wallet_usable":      true,
			"is_subscription_group": false,
		}
	}
	c.JSON(http.StatusOK, gin.H{
		"success": true,
		"message": "",
		"data":    usableGroups,
	})
}
