package query

import (
	"context"
)

type QueryEngine interface {
	// Close closes the query engine
	Close() error
	// CalLoadDataRu calculate load data ru
	CalLoadDataRu(ctx context.Context) ([]*Usage, error)
	// CalPublicEgress calculate public egress ru by gateway metrics
	CalPublicEgress(ctx context.Context) ([]*Usage, error)
	// CalPrivatelinkEgress calculate privatelink egress ru by gateway metrics
	CalPrivatelinkEgress(ctx context.Context) ([]*Usage, error)
	// CalTidbRU calculate tidb ru
	CalTidbRU(ctx context.Context) ([]*Usage, error)
	// CalTiflashRU calculate tiflash ru
	CalTiflashRU(ctx context.Context) ([]*Usage, error)
	// CalTidbRUV2 calculate tidb ru with v2 metrics
	CalTidbRUV2(ctx context.Context) ([]*Usage, error)
	// CalTiflashRUV2 calculate tiflash ru with v2 metrics
	CalTiflashRUV2(ctx context.Context) ([]*Usage, error)
	// CalTikvStorageMedium calculate medium size storage of tikv
	CalTikvStorageMedium(ctx context.Context) ([]*Usage, error)
	// CalTiflashStorageMedium calculate medium size storage of tiflash
	CalTiflashStorageMedium(ctx context.Context) ([]*Usage, error)
	// CalTikvStorageLarge calculate large size storage of tikv
	CalTikvStorageLarge(ctx context.Context) ([]*Usage, error)
	// CalTikvStorageIAMedium calculate medium size IA storage of tikv
	CalTikvStorageIAMedium(ctx context.Context) ([]*Usage, error)
	// CalTikvStorageIALarge calculate large size IA storage of tikv
	CalTikvStorageIALarge(ctx context.Context) ([]*Usage, error)
	// CalTiflashStorageLarge calculate large size storage of tiflash
	CalTiflashStorageLarge(ctx context.Context) ([]*Usage, error)
	// CalIntermediateTikvStorageMedium calculate medium size storage of tikv, and write the intermediate result to s3
	CalIntermediateTikvStorageMedium(ctx context.Context) ([]*Usage, error)
	// CalIntermediateTikvStorageIAMedium calculate medium size IA storage of tikv, and write the intermediate result to s3
	CalIntermediateTikvStorageIAMedium(ctx context.Context) ([]*Usage, error)
	// CalIntermediateTiflashStorageMedium calculate medium size storage of tiflash, and write the intermediate result to s3
	CalIntermediateTiflashStorageMedium(ctx context.Context) ([]*Usage, error)
	// CalRCU calculate rcu of tidb
	CalRCU(ctx context.Context) ([]*Usage, error)
	// CalExecCount calculate statement execution count of each database.
	CalExecCount(ctx context.Context) (ExecCount, error)
}
