package tcms

import (
	"context"
	"os"
	"testing"

	"github.com/joho/godotenv"
	"github.com/tidbcloud/pov-service/internal/model"
	"github.com/stretchr/testify/assert"
)

func TestListWorkflows(t *testing.T) {
	_ = godotenv.Load("./.env")
	thost := os.Getenv("TCMS_ADDRESS")
	tauth := os.Getenv("TCMS_AUTHORITY")
	ttoken := os.Getenv("TCMS_TOKEN")

	c := NewClient(thost, tauth, ttoken, 0)

	ret, err := c.ListPovWorkflows()
	if err != nil {
		t.Fatal(err)
	}
	assert.NotEmpty(t, ret)
	wlnames := ret[0].TrafficNames()

	assert.NotEmpty(t, wlnames)
}

func TestRunWorkflow(t *testing.T) {
	_ = godotenv.Load("./.env")
	thost := os.Getenv("TCMS_ADDRESS")
	tauth := os.Getenv("TCMS_AUTHORITY")
	ttoken := os.Getenv("TCMS_TOKEN")

	c := NewClient(thost, tauth, ttoken, 0)
	params := make(model.WorkloadParams, 0)
	params.Set("duration", "5")

	ret, err := c.RunWorkflow(
		context.Background(),
		*NewRunWorkflowParams(
			180007,
			"tidbcloud_pov_demo_workload",
			params,
		),
	)
	if err != nil {
		t.Fatal(err)
	}
	assert.NotEmpty(t, ret)
}

func TestGetWorkflowRun(t *testing.T) {
	_ = godotenv.Load("./.env")
	thost := os.Getenv("TCMS_ADDRESS")
	tauth := os.Getenv("TCMS_AUTHORITY")
	ttoken := os.Getenv("TCMS_TOKEN")

	c := NewClient(thost, tauth, ttoken, 0)

	ret, err := c.GetWorkflowRun(context.Background(), 180182)
	if err != nil {
		t.Fatal(err)
	}
	assert.NotEmpty(t, ret)
}

func TestPutTestbedRelease(t *testing.T) {
	_ = godotenv.Load("./.env")
	thost := os.Getenv("TCMS_ADDRESS")
	tauth := os.Getenv("TCMS_AUTHORITY")
	ttoken := os.Getenv("TCMS_TOKEN")

	c := NewClient(thost, tauth, ttoken, 0)

	err := c.ReleaseTestbed(context.Background(), 7799132, "testbed-tps-7799132-1-214")
	if err != nil {
		t.Fatal(err)
	}
}

func TestCancelWorkflow(t *testing.T) {
	_ = godotenv.Load("./.env")
	thost := os.Getenv("TCMS_ADDRESS")
	tauth := os.Getenv("TCMS_AUTHORITY")
	ttoken := os.Getenv("TCMS_TOKEN")

	c := NewClient(thost, tauth, ttoken, 0)

	err := c.CancelWorkflow(context.Background(), 90488)
	if err != nil {
		t.Fatal(err)
	}
}
