package model

import (
	"github.com/tidbcloud/dataflow-service-e2e/internal/misc"
	"gopkg.in/yaml.v2"
)

type GcsDimensions struct {
	Region string `yaml:"region"`
}

func (t GcsDimensions) Dimensions() map[string]string {
	return misc.StructToMap(t)
}

type GcsRequirement struct {
	GcsDimensions
}

func (t *GcsRequirement) Type() string {
	return GCS
}

func (t *GcsRequirement) IsDedicated() bool {
	// Notice: we don't support dedicated mysql a specific case
	return false
}

type GcsEntity struct {
	CreatedByDriver bool
	GcsDimensions   `yaml:",inline"`
	BucketURI       string `yaml:"bucketURI"`
}

func (t *GcsEntity) Type() string {
	return GCS
}
func (t *GcsEntity) IsCreatedByDriver() bool {
	return t.CreatedByDriver
}

func (t *GcsEntity) Copy() *GcsEntity {
	data, err := yaml.Marshal(t)
	if err != nil {
		panic(err)
	}
	var copied GcsEntity
	err = yaml.Unmarshal(data, &copied)
	return &copied
}

type GcsEntities []*GcsEntity

func (t GcsEntities) ToDependencyEntities() []DependencyEntity {
	var entities []DependencyEntity
	for _, it := range t {
		entities = append(entities, it)
	}
	return entities
}
