package infrastructure

import (
	"context"
	"errors"
	"oc-datacenter/conf"
)

type Infrastructure interface {
	CreateNamespace(ctx context.Context, ns string) error
	DeleteNamespace(ctx context.Context, ns string) error
	GetToken(ctx context.Context, ns string, duration int) (string, error)
	CreateServiceAccount(ctx context.Context, ns string) error
	CreateRoleBinding(ctx context.Context, ns string, roleBinding string, role string) error
	CreateRole(ctx context.Context, ns string, role string, groups [][]string, resources [][]string, verbs [][]string) error
}

var _service = map[string]func() (Infrastructure, error){
	"kubernetes": NewKubernetesService,
}

func NewService() (Infrastructure, error) {
	service, ok := _service[conf.GetConfig().Mode]
	if !ok {
		return nil, errors.New("service not found")
	}
	return service()
}