package api

import (
	"context"
)

type Query interface {
	Instances(ctx context.Context, params *InstancesParams) ([]InstanceItem, error)
	Summary(ctx context.Context, params *SummaryParams) ([]SummaryItem, error)
}

type InstancesParams struct {
	Env         string
	TenantID    uint64
	ClusterID   uint64
	NextGen     bool
	NextGenHost bool
	Byoc        bool

	StartSecs int
	EndSecs   int
}

type SummaryParams struct {
	Env         string
	TenantID    uint64
	ClusterID   uint64
	NextGen     bool
	NextGenHost bool
	Byoc        bool

	StartSecs    int
	EndSecs      int
	WindowSecs   int
	Top          int
	Instance     string
	InstanceType string
}

type InstanceItem struct {
	Instance     string `json:"instance"`
	InstanceType string `json:"instance_type"`
}

type SummaryItem struct {
	SQLDigest         string            `json:"sql_digest"`
	SQLText           string            `json:"sql_text"`
	IsOther           bool              `json:"is_other"`
	CPUTimeMs         uint64            `json:"cpu_time_ms"`
	ExecCountPerSec   float64           `json:"exec_count_per_sec"`
	DurationPerExecMs float64           `json:"duration_per_exec_ms"`
	ScanRecordsPerSec float64           `json:"scan_records_per_sec"`
	ScanIndexesPerSec float64           `json:"scan_indexes_per_sec"`
	Plans             []SummaryPlanItem `json:"plans"`
}

type SummaryPlanItem struct {
	PlanDigest        string   `json:"plan_digest"`
	PlanText          string   `json:"plan_text"`
	TimestampSec      []uint64 `json:"timestamp_sec"`
	CPUTimeMs         []uint64 `json:"cpu_time_ms"`
	ExecCountPerSec   float64  `json:"exec_count_per_sec"`
	DurationPerExecMs float64  `json:"duration_per_exec_ms"`
	ScanRecordsPerSec float64  `json:"scan_records_per_sec"`
	ScanIndexesPerSec float64  `json:"scan_indexes_per_sec"`
}
