package impl

import (
	"github.com/tidbcloud/dataflow-service/app/internal/status_matrix"
	statusMatrixImpl "github.com/tidbcloud/dataflow-service/app/internal/status_matrix/impl"
	"github.com/tidbcloud/dataflow-service/app/models/domain"
	"github.com/tidbcloud/dataflow-service/app/repo/entity"
)

var statusMatrix = map[string]map[string]string{
	string(entity.BucketStatusCreating): {
		string(domain.DeleteBucket):     string(entity.BucketStatusDeleting),
		string(domain.EditBucketPolicy): string(entity.BucketStatusCreated),
	},
	string(entity.BucketStatusCreated): {
		string(domain.EditBucket):             string(entity.BucketStatusEditing),
		string(domain.DeleteBucket):           string(entity.BucketStatusDeleting),
		string(domain.EditBucketReplications): string(entity.BucketStatusCreated),
		string(domain.EditBucketPolicy):       string(entity.BucketStatusCreated),
	},
	string(entity.BucketStatusEditing): {
		string(domain.DeleteBucket):           string(entity.BucketStatusDeleting),
		string(domain.EditBucketReplications): string(entity.BucketStatusEditing),
		string(domain.EditBucketPolicy):       string(entity.BucketStatusEditing),
	},
	string(entity.BucketStatusDeleting): {},
	string(entity.BucketStatusDeleted):  {},
}

var steadyStateMatrix = map[string]string{
	string(entity.BucketStatusCreating): string(entity.BucketStatusCreated),
	string(entity.BucketStatusDeleting): string(entity.BucketStatusDeleted),
	string(entity.BucketStatusEditing):  string(entity.BucketStatusCreated),
}

func NewBucketStatusMatrix() status_matrix.StatusMatrix {
	return statusMatrixImpl.NewStatusMatrix(statusMatrix, nil, steadyStateMatrix)
}
