package ipam

import (
	"fmt"
	"net/netip"
)

type Service struct{}

func NewService() *Service {
	return &Service{}
}

func (s *Service) Allocate(cidr string, offset int) (string, error) {
	prefix, err := netip.ParsePrefix(cidr)
	if err != nil {
		return "", err
	}

	address := prefix.Addr().Next()
	for i := 1; i < offset; i++ {
		address = address.Next()
	}

	return fmt.Sprintf("%s/32", address.String()), nil
}
