package supply

import (
	"testing"

	_ "github.com/safing/jess/tools/all"
)

func TestSupply(t *testing.T) {
	t.Parallel()

	total := 10
	supply := NewSignetSupply(total)
	scheme := "ECDH-X25519"

	// get signet to initialize space
	_, err := supply.GetSignet(scheme)
	if err != nil {
		t.Fatal(err)
	}

	// fill one
	full, err := supply.Fill(1)
	if err != nil {
		t.Fatal(err)
	}
	if full {
		t.Fatal("not expected to be full")
	}

	// take two
	for i := 0; i < 2; i++ {
		_, err := supply.GetSignet(scheme)
		if err != nil {
			t.Fatal(err)
		}
	}

	// fill up
	full, err = supply.Fill(total + 1)
	if err != nil {
		t.Fatal(err)
	}
	if !full {
		t.Fatal("expected to be full")
	}

	// empty all
	for i := 0; i < total; i++ {
		_, err := supply.GetSignet(scheme)
		if err != nil {
			t.Fatal(err)
		}
	}

	// fill and empty with different sizes
	for i := 0; i < total+3; i++ {
		// fill i
		_, err := supply.Fill(i)
		if err != nil {
			t.Fatal(err)
		}

		// empty total-i
		for j := 0; j < total+3-i; j++ {
			_, err := supply.GetSignet(scheme)
			if err != nil {
				t.Fatal(err)
			}
		}
	}
}