// Package store owns the embedded Prometheus TSDB used for decision metrics.
package store

import (
	"fmt"
	"time"

	"github.com/prometheus/common/promslog"
	"github.com/prometheus/prometheus/tsdb"
)

const DefaultRetention = time.Hour

// Config configures the embedded TSDB.
type Config struct {
	Path      string
	Retention time.Duration
}

// Open opens one embedded Prometheus TSDB. Callers must close the returned DB.
func Open(cfg *Config) (*tsdb.DB, error) {
	if cfg == nil {
		return nil, fmt.Errorf("metrics store: config is required")
	}
	if cfg.Path == "" {
		return nil, fmt.Errorf("metrics store: path is required")
	}
	if cfg.Retention <= 0 {
		return nil, fmt.Errorf("metrics store: retention must be greater than zero")
	}

	opts := tsdb.DefaultOptions()
	opts.RetentionDuration = cfg.Retention.Milliseconds()
	db, err := tsdb.Open(cfg.Path, promslog.NewNopLogger(), nil, opts, nil)
	if err != nil {
		return nil, fmt.Errorf("metrics store: open TSDB: %w", err)
	}
	return db, nil
}
