package freelist

import (
	"fmt"
	"testing"
)

func createFreeList() (_ *FreeList, err error) {
	return New(Options{
		PageSize:        20,
		BaseFilePath:    "test.basefree",
		DeltaFilePath:   "test.deltafree",
		FrozenPageCount: 2,
	})
}

func TestBuffer(t *testing.T) {
	freeList, err := createFreeList()
	if err != nil {
		t.Fatal(err)
	}

	pageNumbers := []uint32{1, 2, 3, 4}
	//pageNumbers := []uint32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

	err = freeList.AddPageNumbers(pageNumbers)
	if err != nil {
		t.Fatal(err)
	}

	for range len(pageNumbers) + 1 {
		pageNo, err := freeList.GetPageNumber()
		fmt.Println(pageNo, err)
	}
}

func TestSave(t *testing.T) {
	freeList, err := createFreeList()
	if err != nil {
		t.Fatal(err)
	}

	pageNumbers := []uint32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

	err = freeList.AddPageNumbers(pageNumbers)
	if err != nil {
		t.Fatal(err)
	}

	err = freeList.Merge()
	if err != nil {
		t.Fatal(err)
	}

	// for range len(pageNumbers) + 1 {
	// 	pageNo, err := freeList.GetPageNumber()
	// 	fmt.Println(pageNo, err)
	// }
}

// func TestDelta(t *testing.T) {
// 	freeList, err := createFreeList()
// 	if err != nil {
// 		t.Fatal(err)
// 	}

// 	serialized := []byte{9, 0, 0, 0, 10, 0, 0, 0}

// 	err = freeList.Restore(serialized)
// 	if err != nil {
// 		t.Fatal(err)
// 	}

// 	for range 3 {
// 		pageNo, err := freeList.GetPageNumber()
// 		fmt.Println(pageNo, err)
// 	}

// 	err = freeList.AddPageNumbers([]uint32{20, 21, 22})
// 	if err != nil {
// 		t.Fatal(err)
// 	}

// 	err = freeList.AddPageNumbers([]uint32{23, 24, 25, 26})
// 	if err != nil {
// 		t.Fatal(err)
// 	}

// 	serialized, err = freeList.Serialize()
// 	if err != nil {
// 		t.Fatal(err)
// 	}

// 	fmt.Println("free serialized:", serialized)

// 	err = freeList.Merge()
// 	if err != nil {
// 		t.Fatal(err)
// 	}
// }

// func TestGetFromFreeList(t *testing.T) {
// 	freeList, err := createFreeList()
// 	if err != nil {
// 		t.Fatal(err)
// 	}

// 	for range 4 {
// 		pageNo, err := freeList.GetPageNumber()
// 		fmt.Println(pageNo, err)
// 	}
// }
