package error_wrapper

import (
	"sync"

	"github.com/tidbcloud/pkgv2/bizerr"
)

type BizErrWrapper struct{}

var (
	bizErrWrapper *BizErrWrapper
	bizErrOnce    sync.Once
)

func getBizErrWrapper() *BizErrWrapper {
	bizErrOnce.Do(func() {
		bizErrWrapper = &BizErrWrapper{}
	})
	return bizErrWrapper
}

func (b *BizErrWrapper) NewInvalidInputError(format string, a ...any) error {
	return bizerr.New(bizerr.ErrCodeParams, format, a...)
}

func (b *BizErrWrapper) NewInternalErr(format string, a ...any) error {
	return bizerr.New(bizerr.ErrCodeUnknown, format, a...)
}

func (b *BizErrWrapper) NewNotFoundErr(format string, a ...any) error {
	return bizerr.New(bizerr.ErrCodeRecordNotFound, format, a...)
}

func (b *BizErrWrapper) NewNotAuthenticatedErr(format string, a ...any) error {
	return bizerr.New(bizerr.ErrCodeAuth, format, a...)
}

func (b *BizErrWrapper) NewForbiddenErr(format string, a ...any) error {
	return bizerr.New(bizerr.ErrCodePermission, format, a...)
}

func (b *BizErrWrapper) WrapGormError(err error, format string, args ...any) error {
	return bizerr.WrapGormError(err, format, args...)
}
