package repo

import (
	"github.com/tidbcloud/devops/pkg/service/userbehavior/repo/cvt"
	"github.com/tidbcloud/pkgv2/db"
)

// Repository provides access to all drivers
type Repository interface {
	GTMLeadDriver() GTMLeadDriver
	GTMSentEmailDriver() GTMSentEmailDriver
	GTMEmailSuppressionDriver() GTMEmailSuppressionDriver
}

type repository struct {
	drv *driver
}

// New creates a new Repository instance
func New(dbp db.Provider) Repository {
	d := &driver{
		cvter:      cvt.NewConverter(),
		dbProvider: dbp,
	}

	return &repository{
		drv: d,
	}
}

func (r *repository) GTMLeadDriver() GTMLeadDriver {
	return (*gtmLeadDriver)(r.drv)
}

func (r *repository) GTMSentEmailDriver() GTMSentEmailDriver {
	return (*gtmSentEmailDriver)(r.drv)
}

func (r *repository) GTMEmailSuppressionDriver() GTMEmailSuppressionDriver {
	return (*gtmEmailSuppressionDriver)(r.drv)
}
