package mytokenlib

import (
	"github.com/oidc-mytoken/server/internal/server/endpoints/revocation/pkg"
	"github.com/oidc-mytoken/server/pkg/model"
	"github.com/oidc-mytoken/server/shared/httpClient"
)

func (my *Mytoken) Revoke(superToken, oidcIssuer string, recursive bool) error {
	req := pkg.RevocationRequest{
		Token:      superToken,
		Recursive:  recursive,
		OIDCIssuer: oidcIssuer,
	}
	resp, err := httpClient.Do().R().SetBody(req).SetError(&model.APIError{}).Post(my.RevocationEndpoint)
	if err != nil {
		return newMytokenErrorFromError("error while sending http request", err)
	}
	if e := resp.Error(); e != nil {
		if errRes := e.(*model.APIError); errRes != nil && len(errRes.Error) > 0 {
			return &MytokenError{
				err:          errRes.Error,
				errorDetails: errRes.ErrorDescription,
			}
		}
	}
	return nil
}