package cdc

import (
	"fmt"
	l4g "github.com/alecthomas/log4go"
	"github.com/dailymotion/allure-go"
	"github.com/pingcap/log"
	"github.com/stretchr/testify/require"
	"github.com/tidbcloud/qa-PlatformAPIAuto/common"
	"testing"
)

type S3ManagerCommand func() error

func (s *CommonTidbToS3SceneTest) ExecuteManagerCommandToS3Step(commandFunc S3ManagerCommand) {
	allure.Step(
		allure.Description("execute manage S3 command step"),
		allure.Action(func() {
			err := commandFunc()
			if err != nil {
				errorMsg := fmt.Errorf("execute manage s3 occur error: %s", err)
				l4g.Error(errorMsg)
				allure.FailNow(errorMsg)
			}
		}),
	)
}

func (s *CommonTidbToS3SceneTest) InitS3() error {
	err := common.DeleteAwsBucket(s.DbaasRequestInfo.CommonEnv.S3Uri, s.DbaasRequestInfo.CommonEnv.Ec2Host,
		s.DbaasRequestInfo.CommonEnv.CerPath, s.DbaasRequestInfo.CommonEnv.LoginUser)
	if err != nil {
		l4g.Error("delete bucket failed: %s", s.DbaasRequestInfo.CommonEnv.S3Uri)
		return err
	}
	err = common.CreateAwsBucket(s.DbaasRequestInfo.CommonEnv.S3Uri, s.DbaasRequestInfo.CommonEnv.Ec2Host,
		s.DbaasRequestInfo.CommonEnv.CerPath, s.DbaasRequestInfo.CommonEnv.LoginUser)
	if err != nil {
		l4g.Error("create bucket failed: %s", s.DbaasRequestInfo.CommonEnv.S3Uri)
		return err
	}
	return nil
}

func (s *CommonTidbToS3SceneTest) CheckS3BucketSize(t *testing.T) {
	allure.Step(
		allure.Description("check aws bucket size"),
		allure.Action(func() {
			log.Info("check aws bucket size")
			size, err := common.GetAwsBucketSize(s.DbaasRequestInfo.CommonEnv.S3Uri, s.DbaasRequestInfo.CommonEnv.Ec2Host,
				s.DbaasRequestInfo.CommonEnv.CerPath, s.DbaasRequestInfo.CommonEnv.LoginUser)
			if err != nil {
				l4g.Info("get aws bucket size failed:%s", err)
			}
			l4g.Info("get aws bucket size failed:%s, size:%s", err, size)
			require.NotEqual(t, 0, size)
		}),
	)
}
