package service

import (
	"github.com/pingcap-inc/data-ingestion-tools/internal/itcronjob/store"
)

type Service interface {
	S3() S3Srv
	Gcs() GcsSrv
	Bill() BillSrv
	Aws() AwsSrv
	FullProjects() FullProjSrv
	OrgOrder() OrgOrderSrv
	Salesforce() SalesforceSrv
	CloudBilling() CloudBillingSrv
}

type service struct {
	store store.Factory
}

func NewService(store store.Factory) Service {
	return &service{
		store: store,
	}
}

func (s *service) S3() S3Srv {
	return newS3(s)
}

func (s *service) Gcs() GcsSrv {
	return newGcs(s)
}

func (s *service) Bill() BillSrv {
	return newBill(s)
}

func (s *service) Aws() AwsSrv {
	return newAws(s)
}

func (s *service) FullProjects() FullProjSrv {
	return newFullProj(s)
}

func (s *service) OrgOrder() OrgOrderSrv {
	return newOrgOrder(s)
}

func (s *service) Salesforce() SalesforceSrv {
	return newSalesforceSrv(s)
}

func (s *service) CloudBilling() CloudBillingSrv {
	return newCloudBilling(s)
}
