package controllers

import (
	"WorldEpcho/src/models"
	"WorldEpcho/src/service"
	"github.com/gin-gonic/gin"
	"log"
	"net/http"
)

// GetInviteCode 获取用户的邀请码
func GetInviteCode(c *gin.Context) {
	/*
	   判断用户是否登录
	*/
	userID, isLogin := service.IsUserLoggedIn(c)
	if !isLogin {
		log.Println("用户未登录")
		c.JSON(http.StatusOK, gin.H{"code": 0, "message": "用户未登录"})
		return
	}
	//根据用户id到mysql数据库查询一下是否存在
	inviteCode, err := models.QueryInviteCode(userID)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{"code": 0, "message": "根据用户id查询邀请码失败!"})
		return
	}
	if inviteCode == "" {
		// 调用查询邀请码的函数
		code, err := models.GenerateInviteCode(userID)
		if err != nil {
			c.JSON(http.StatusOK, gin.H{"code": 0, "message": "获取邀请码失败!"})
			return
		}

		c.JSON(http.StatusOK, gin.H{
			"code":        1,
			"invite_code": code,
			"message":     "生成邀请码",
		})
	} else {
		c.JSON(http.StatusOK, gin.H{
			"code":        1,
			"message":     "邀请码已存在",
			"invite_code": inviteCode,
		})
	}
}

//重置邀请码
func ResetUserInviteCode(c *gin.Context) {
	/*
	   判断用户是否登录
	*/
	userID, isLogin := service.IsUserLoggedIn(c)
	if !isLogin {
		log.Println("用户未登录")
		return
	}

	// 调用重置邀请码的函数
	InviteCode, err1 := models.ResetInviteCode(userID)
	if err1 != nil {
		c.JSON(http.StatusOK, gin.H{"code": 0,
			"message": "重置邀请码失败"})
		return
	}

	c.JSON(http.StatusOK, gin.H{
		"code":        1,
		"invite_code": InviteCode,
		"message":     "邀请码重置成功",
	})
}

//获取直接邀请人
/*
func QueryDirectInviter(c *gin.Context) {

	   //判断用户是否登录

	userID, isLogin := IsUserLoggedIn(c)
	if !isLogin {
		log.Println("用户未登录")
		return
	}
	inviter, err := models.GetDirectInviter(userID)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{"code": 0,
			"message": err.Error()})
		return
	} else {

		c.JSON(http.StatusOK, gin.H{"code": 1,
			"message": "获取直接邀请人成功!",
			"邀请人":     inviter,
		})
	}
}
*/
// 根据邀请人的id获取所有被邀请的用户的id
func QueryDirectInviter(c *gin.Context) {
	//判断用户是否登录

	userID, isLogin := service.IsUserLoggedIn(c)
	if !isLogin {
		log.Println("用户未登录")
		c.JSON(http.StatusOK, gin.H{"code": 0, "message": "用户未登录"})
		return
	}
	//根据邀请人的ID查询所有被邀请人的ID
	inviteeIds, err := models.GetInviteesByInviterID(userID)

	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code":    0,
			"message": err.Error()})
		return
	} else {

		c.JSON(http.StatusOK, gin.H{"code": 1,
			"message":    "获取直接邀请人成功!",
			"inviteeIds": inviteeIds,
		})
	}
}

//查询用户的直接邀请人
func QueryIndirectInvitees(c *gin.Context) {
	//判断用户是否登录
	userID, isLogin := service.IsUserLoggedIn(c)
	if !isLogin {
		log.Println("用户未登录")
		c.JSON(http.StatusOK, gin.H{"code": 0, "message": "用户未登录"})
		return
	}
	//根据当前用户的id查询所有间接邀请的人
	invitees, err := models.GetIndirectInvitees(userID)
	if err != nil {
		c.JSON(http.StatusOK, gin.H{
			"code":    0,
			"message": err.Error()})
		return
	} else {

		c.JSON(http.StatusOK, gin.H{"code": 1,
			"message":  "获取所有间接邀请人成功!",
			"invitees": invitees,
		})
	}

}
