package captcha

import (
	"git.noahlan.cn/n-admin/n-admin-server/dal/errx"
	"git.noahlan.cn/noahlan/ntool-biz/core/captcha"
	"git.noahlan.cn/noahlan/ntool-biz/core/config"
	"git.noahlan.cn/noahlan/ntool-biz/core/nstatus"
	"github.com/mojocn/base64Captcha"
	"strings"
)

type CaptchaMgr struct {
	Captcha *base64Captcha.Captcha
}

func NewCaptchaManager(config captcha.Config, redisConf config.RedisConf) *CaptchaMgr {
	return &CaptchaMgr{
		Captcha: captcha.MustNewRedisCaptcha(config, redisConf),
	}
}

func (c *CaptchaMgr) Verify(captchaId, captchaStr string, clear bool) error {
	if captchaId != "" && captchaStr != "" {
		if ok := c.Captcha.Verify("CAPTCHA_"+captchaId, strings.ToLower(captchaStr), clear); !ok {
			return nstatus.NewBizErrWithCode(errx.InvalidCaptchaErr)
		}
	}
	return nil
}

func (c *CaptchaMgr) Generate() (id, b64s string, err error) {
	id, b64s, err = c.Captcha.Generate()
	if err != nil {
		return "", "", nstatus.NewBizErrWithCode(errx.CaptchaGenerateErr)
	}
	return id, b64s, nil
}
