package v1

import (
	"context"

	"github.com/pingcap-inc/pchub/internal/apiserver/store"
	v1 "github.com/pingcap-inc/pchub/model/v1"
)

type providerService struct {
	store store.Factory
}

type ProviderSrv interface {
	List(ctx context.Context) ([]*v1.CloudProvider, error)
}

var _ ProviderSrv = (*providerService)(nil)

func newProvider(srv *service) *providerService {
	return &providerService{store: srv.store}
}

func (p *providerService) List(ctx context.Context) ([]*v1.CloudProvider, error) {
	res, err := p.store.CloudProvider().Gets(ctx)
	if err != nil {
		return nil, err
	}
	r := make([]*v1.CloudProvider, 0, len(res))
	for _, item := range res {
		if item.Code != "aws" && item.Code != "gcp" && item.Code != "azure" && item.Code != "azurecn" && item.Code != "alicloud" {
			continue
		}
		r = append(r, item)
	}

	return r, nil
}
