package requests

import (
	"errors"

	"github.com/status-im/status-go/eth-node/types"
)

var ErrNoCommunityID = errors.New("community metrics request has no community id")
var ErrInvalidTimestampIntervals = errors.New("community metrics request invalid time intervals")

type CommunityMetricsRequestType uint

const (
	CommunityMetricsRequestMessagesTimestamps CommunityMetricsRequestType = iota
	CommunityMetricsRequestMessagesCount
	CommunityMetricsRequestMembers
	CommunityMetricsRequestControlNodeUptime
)

type MetricsIntervalRequest struct {
	StartTimestamp uint64 `json:"startTimestamp"`
	EndTimestamp   uint64 `json:"endTimestamp"`
}

type CommunityMetricsRequest struct {
	CommunityID types.HexBytes              `json:"communityId"`
	Type        CommunityMetricsRequestType `json:"type"`
	Intervals   []MetricsIntervalRequest    `json:"intervals"`
}

func (r *CommunityMetricsRequest) Validate() error {
	if len(r.CommunityID) == 0 {
		return ErrNoCommunityID
	}

	for _, interval := range r.Intervals {
		if interval.StartTimestamp == 0 || interval.EndTimestamp == 0 || interval.StartTimestamp >= interval.EndTimestamp {
			return ErrInvalidTimestampIntervals
		}
	}

	return nil
}