package client

import (
	"fmt"
	"os"

	"github.com/go-resty/resty/v2"

	"github.com/tidbcloud/aisupport/packages/sdk-go/infra/auth/consts"
)

func SetupClientAuth(cli *resty.Client) (*resty.Client, error) {
	header, value, err := getAuthHeader()
	if err != nil {
		return nil, err
	}

	return cli.SetHeader(header, value), nil
}

func SetupRequestAuth(req *resty.Request) (*resty.Request, error) {
	header, value, err := getAuthHeader()
	if err != nil {
		return nil, err
	}

	return req.SetHeader(header, value), nil
}

func getAuthHeader() (string, string, error) {
	if accessToken := os.Getenv(consts.EnvDevOpsAccessToken); accessToken != "" {
		return consts.HeaderAuthorization, "Bearer " + accessToken, nil
	}
	if apiToken := os.Getenv(consts.EnvDevOpsAPIToken); apiToken != "" {
		return consts.HeaderAPIToken, apiToken, nil
	}
	if apiKey := os.Getenv(consts.EnvDevOpsAPIKey); apiKey != "" {
		return consts.HeaderAPIKey, apiKey, nil
	}

	return "", "", fmt.Errorf("one of %s, %s, %s is required", consts.EnvDevOpsAccessToken, consts.EnvDevOpsAPIToken, consts.EnvDevOpsAPIKey)
}
