package webScene

import (
	"testing"

	"github.com/stretchr/testify/assert"
	bssCases "github.com/tidbcloud/qa-PlatformAPIAuto/webScene/cbp/bss"
	iamCases "github.com/tidbcloud/qa-PlatformAPIAuto/webScene/cbp/iam"
	"github.com/tidbcloud/qa-gourd/ProductModel"
	"github.com/tidbcloud/qa-gourd/handler"
)

// ----------------------------------------------------   CBP Account Feature Scene */ ----------------------------------------------------
/* Account Invite Scene */
func (w *WebE2ECase) Invite(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	w.Reporter.SceneReport(func() {
		iamCases.RunInviteTest(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})
}

func (w *WebE2ECase) UserProfileCheck(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	w.Reporter.SceneReport(func() {
		iamCases.RunUserProfileTest(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})
}

/* Account Sign Up Scene */
func (w *WebE2ECase) SignUp(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	w.Reporter.SceneReport(func() {
		iamCases.RunSignUpTest(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})
}

// ----------------------------------------------------   CBP Billing Feature Scene */ ----------------------------------------------------
/* Billing Bankcard Scene */
func (w *WebE2ECase) CheckBankCardOperation(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	if handler.EnvFile == ProductModel.Prod {
		w.Reporter.StepReport("CheckBankCardOperation - CanNotRunInProd",
			func() {
				assert.True(w.Reporter.T, false)
			})
		return
	}
	w.Reporter.SceneReport(func() {
		bssCases.RunPaymentStripeTest(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})

}

/* Billing Contract Scene */
func (w *WebE2ECase) CheckContractOperation(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	if handler.EnvFile == ProductModel.Prod {
		w.Reporter.StepReport("CheckContractOperation - CanNotRunInProd",
			func() {
				assert.True(w.Reporter.T, false)
			})
		return
	}
	w.Reporter.SceneReport(func() {
		bssCases.RunContractTest(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})

}

/* Billing Invoice & Bills Scene */
// check billing's core api , include : tenant plan / credits & credit summay / payment
func (w *WebE2ECase) CheckBillingCoreAPI(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	w.Reporter.SceneReport(func() {
		bssCases.RunBillingTest(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})
}

func (w *WebE2ECase) CheckBillingScene(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	if handler.EnvFile == ProductModel.Prod {
		w.Reporter.StepReport("CheckBillingScene - CanNotRunInProd",
			func() {
				assert.True(w.Reporter.T, false)
			})
		return
	}
	w.Reporter.SceneReport(func() {
		bssCases.RunBillingScene(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})
}

func (w *WebE2ECase) CheckCreditsScene(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	if handler.EnvFile == ProductModel.Prod {
		w.Reporter.StepReport("CheckCreditsScene - CanNotRunInProd",
			func() {
				assert.True(w.Reporter.T, false)
			})
		return
	}
	w.Reporter.SceneReport(func() {
		bssCases.RunCreditsScene(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})
}

func (w *WebE2ECase) CheckPoCScene(t *testing.T) {
	t.Parallel()
	w.SetReporter(t)
	if handler.EnvFile == ProductModel.Prod {
		w.Reporter.StepReport("CheckPoCScene - CanNotRunInProd",
			func() {
				assert.True(w.Reporter.T, false)
			})
		return
	}
	w.Reporter.SceneReport(func() {
		bssCases.RunPoCScene(w.WebRequestInfo, w.URLInfoMap, &w.Reporter)
	})
}
