// Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg.
// All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package main

import (
	"github.com/ClusterCockpit/cc-backend/pkg/schema"
)

type JobData map[string]map[schema.MetricScope]*JobMetric

type JobMetric struct {
	Unit             string             `json:"unit"`
	Scope            schema.MetricScope `json:"scope"`
	Timestep         int                `json:"timestep"`
	Series           []Series           `json:"series"`
	StatisticsSeries *StatsSeries       `json:"statisticsSeries"`
}

type Series struct {
	Hostname   string            `json:"hostname"`
	Id         *int              `json:"id,omitempty"`
	Statistics *MetricStatistics `json:"statistics"`
	Data       []schema.Float    `json:"data"`
}

type MetricStatistics struct {
	Avg float64 `json:"avg"`
	Min float64 `json:"min"`
	Max float64 `json:"max"`
}

type StatsSeries struct {
	Mean        []Float         `json:"mean"`
	Min         []Float         `json:"min"`
	Max         []Float         `json:"max"`
	Percentiles map[int][]Float `json:"percentiles,omitempty"`
}

// type MetricScope string

// const (
// 	MetricScopeInvalid MetricScope = "invalid_scope"

// 	MetricScopeNode         MetricScope = "node"
// 	MetricScopeSocket       MetricScope = "socket"
// 	MetricScopeMemoryDomain MetricScope = "memoryDomain"
// 	MetricScopeCore         MetricScope = "core"
// 	MetricScopeHWThread     MetricScope = "hwthread"

// 	MetricScopeAccelerator MetricScope = "accelerator"
// )

// var metricScopeGranularity map[MetricScope]int = map[MetricScope]int{
// 	MetricScopeNode:         10,
// 	MetricScopeSocket:       5,
// 	MetricScopeMemoryDomain: 3,
// 	MetricScopeCore:         2,
// 	MetricScopeHWThread:     1,

// 	MetricScopeAccelerator: 5, // Special/Randomly choosen

// 	MetricScopeInvalid: -1,
// }