package component

import (
	"context"
	"fmt"
	"os"
	"strings"
	"time"
	"wireguard-dashboard/client"
	"wireguard-dashboard/constant"
)

type CaptchaStore struct{}

// Set
// @description: 验证码放入指定存储
// @receiver CaptchaStore
// @param id
// @param value
// @return error
func (CaptchaStore) Set(id string, value string) error {
	return client.Redis.Set(context.Background(), fmt.Sprintf("%s:%s", constant.Captcha, id), value, 2*time.Minute).Err()
}

// Get
// @description: 获取验证码信息
// @receiver CaptchaStore
// @param id
// @param clear
// @return string
func (CaptchaStore) Get(id string, clear bool) string {
	val, err := client.Redis.Get(context.Background(), fmt.Sprintf("%s:%s", constant.Captcha, id)).Result()
	if err != nil {
		return ""
	}

	if clear {
		client.Redis.Del(context.Background(), fmt.Sprintf("%s:%s", constant.Captcha, id))
		return val
	}

	return val
}

// Verify
// @description: 校验
// @receiver CaptchaStore
// @param id
// @param answer
// @param clear
// @return bool
func (c CaptchaStore) Verify(id, answer string, clear bool) bool {
	if os.Getenv("GIN_MODE") != "release" {
		return true
	}
	return strings.ToUpper(answer) == strings.ToUpper(c.Get(id, clear))
}