package utils

import (
	"context"
	"fmt"

	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/pool"
	"github.com/valyala/fasthttp"
)

type EpochDurations struct {
	CurrentEpoch  uint64
	MsPerBlock    int64
	BlockPerEpoch uint64
}

func GetEpochDurations(ctx context.Context, p *pool.Pool) (*EpochDurations, error) {
	networkInfo, err := p.NetworkInfo(ctx)
	if err != nil {
		return nil, err
	}

	res := &EpochDurations{
		CurrentEpoch:  networkInfo.CurrentEpoch(),
		MsPerBlock:    networkInfo.MsPerBlock(),
		BlockPerEpoch: networkInfo.EpochDuration(),
	}

	if res.BlockPerEpoch == 0 {
		return nil, fmt.Errorf("EpochDuration is empty")
	}
	return res, nil
}

// SetContextToRequest adds new context to fasthttp request.
func SetContextToRequest(ctx context.Context, c *fasthttp.RequestCtx) {
	c.SetUserValue("context", ctx)
}

// GetContextFromRequest returns main context from fasthttp request context.
func GetContextFromRequest(c *fasthttp.RequestCtx) context.Context {
	return c.UserValue("context").(context.Context)
}