package sm2

import (
	"fmt"
)

func (s *Sm2) SetError(err error) *Sm2 {
	s.err = append(s.err, err)
	return s
}

func (s *Sm2) encryptErrHandler() error {
	if len(s.data) == 0 {
		s.SetError(fmt.Errorf("data is empty"))
	}
	if s.publicKey == nil {
		s.SetError(fmt.Errorf("publicKey is nil"))
	}
	return s.errHandle()
}

func (s *Sm2) decryptErrHandler() error {
	if len(s.data) == 0 {
		s.SetError(fmt.Errorf("data is empty"))
	}
	if s.privateKey == nil {
		s.SetError(fmt.Errorf("privateKey is nil"))
	}
	return s.errHandle()
}

func (s *Sm2) verifyErrHandler() error {
	if len(s.data) == 0 {
		s.SetError(fmt.Errorf("data is empty"))
	}
	if s.publicKey == nil {
		s.SetError(fmt.Errorf("publicKey is nil"))
	}
	return s.errHandle()
}

func (s *Sm2) signErrHandler() error {
	if len(s.data) == 0 {
		s.SetError(fmt.Errorf("data is empty"))
	}
	if s.privateKey == nil {
		s.SetError(fmt.Errorf("privateKey is nil"))
	}
	return s.errHandle()
}

func (s *Sm2) errHandle() error {
	if len(s.err) > 0 {
		errStr := ""
		for _, e := range s.err {
			errStr += e.Error() + "\n"
		}
		return fmt.Errorf(errStr)
	}
	return nil
}
