package fastlyxff

import (
	"encoding/json"
	"net"
	"net/netip"
	"os"

	"github.com/labstack/echo/v4"
)

type FastlyXFF struct {
	IPv4 []string `json:"addresses"`
	IPv6 []string `json:"ipv6_addresses"`
}

type TrustedNets struct {
	prefixes []netip.Prefix
}

func New(fileName string) (*FastlyXFF, error) {
	b, err := os.ReadFile(fileName)
	if err != nil {
		return nil, err
	}

	d := FastlyXFF{}

	err = json.Unmarshal(b, &d)
	if err != nil {
		return nil, err
	}

	return &d, nil
}

func (xff *FastlyXFF) EchoTrustOption() ([]echo.TrustOption, error) {
	ranges := []echo.TrustOption{}

	for _, s := range append(xff.IPv4, xff.IPv6...) {
		_, cidr, err := net.ParseCIDR(s)
		if err != nil {
			return nil, err
		}

		trust := echo.TrustIPRange(cidr)
		ranges = append(ranges, trust)
	}

	return ranges, nil
}