package monitoring

import (
	"log"
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
	txCounter = prometheus.NewCounter(
		prometheus.CounterOpts{
			Name: "dejo_tx_total",
			Help: "Total de transações recebidas pelo nó",
		},
	)

	finalizedBlocks = prometheus.NewCounter(
		prometheus.CounterOpts{
			Name: "dejo_finalized_blocks_total",
			Help: "Total de blocos finalizados pelo nó",
		},
	)

	uptimeGauge = prometheus.NewGaugeFunc(
		prometheus.GaugeOpts{
			Name: "dejo_uptime_seconds",
			Help: "Tempo desde que o nó foi iniciado",
		},
		func() float64 {
			return time.Since(startTime).Seconds()
		},
	)
)

var startTime = time.Now()

// Init inicializa o endpoint /metrics
func Init() {
	prometheus.MustRegister(txCounter)
	prometheus.MustRegister(finalizedBlocks)
	prometheus.MustRegister(uptimeGauge)

	go func() {
		http.Handle("/metrics", promhttp.Handler())
		log.Println("📊 Endpoint de métricas disponível em /metrics")
		http.ListenAndServe(":9100", nil)
	}()
}

// IncTxCount incrementa o total de transações recebidas
func IncTxCount() {
	txCounter.Inc()
}

// IncFinalizedBlocks incrementa o total de blocos finalizados
func IncFinalizedBlocks() {
	finalizedBlocks.Inc()
}