package config

import (
	"fmt"
	"time"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

type MetricReporterConfig struct {
	TTL             *metav1.Duration `json:"ttl"`
	CleanupInterval *metav1.Duration `json:"cleanup_interval"`
}

func (c *MetricReporterConfig) Complete() error {
	if c.TTL == nil {
		c.TTL = &metav1.Duration{Duration: 23 * time.Hour}
	}
	if c.CleanupInterval == nil {
		c.CleanupInterval = &metav1.Duration{Duration: 30 * time.Minute}
	}
	return nil
}

type PubSubReporterConfig struct {
	ProjectID string `json:"project_id"`
	TopicID   string `json:"topic_id"`
}

func (c *PubSubReporterConfig) Complete() error {
	if c.ProjectID == "" {
		return fmt.Errorf("project_id is required")
	}
	if c.TopicID == "" {
		return fmt.Errorf("topic_id is required")
	}
	return nil
}

type NotifyConfig struct {
	// Metric caches violations and report them when scraping metrics.
	Metric *MetricReporterConfig `json:"metric"`

	// PubSub reports a violation to a GCP PubSub topic.
	PubSub *PubSubReporterConfig `json:"pubsub"`
}
