package efivarfs

import (
	"bytes"
	"testing"

	"github.com/google/uuid"
)

func TestMarshalExamples(t *testing.T) {
	cases := []struct {
		name        string
		path        DevicePath
		expected    []byte
		expectError bool
	}{
		{
			name: "TestNone",
			path: DevicePath{},
			expected: []byte{
				0x7f, 0xff, // End of HW device path
				0x04, 0x00, // Length: 4 bytes
			},
		},
		{
			// From UEFI Device Path Examples, extracted single entry
			name: "TestHD",
			path: DevicePath{
				&HardDrivePath{
					PartitionNumber:     1,
					PartitionStartBlock: 0x22,
					PartitionSizeBlocks: 0x2710000,
					PartitionMatch: PartitionGPT{
						PartitionUUID: uuid.MustParse("15E39A00-1DD2-1000-8D7F-00A0C92408FC"),
					},
				},
			},
			expected: []byte{
				0x04, 0x01, // Hard Disk type
				0x2a, 0x00, // Length
				0x01, 0x00, 0x00, 0x00, // Partition Number
				0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Part Start
				0x00, 0x00, 0x71, 0x02, 0x00, 0x00, 0x00, 0x00, // Part Size
				0x00, 0x9a, 0xe3, 0x15, 0xd2, 0x1d, 0x00, 0x10,
				0x8d, 0x7f, 0x00, 0xa0, 0xc9, 0x24, 0x08, 0xfc, // Signature
				0x02,       // Part Format GPT
				0x02,       // Signature GPT
				0x7f, 0xff, // End of HW device path
				0x04, 0x00, // Length: 4 bytes
			},
		},
		{
			name: "TestFilePath",
			path: DevicePath{
				FilePath("asdf"),
			},
			expected: []byte{
				0x04, 0x04, // File Path type
				0x0e, 0x00, // Length
				'a', 0x00, 's', 0x00, 'd', 0x00, 'f', 0x00,
				0x00, 0x00,
				0x7f, 0xff, // End of HW device path
				0x04, 0x00, // Length: 4 bytes
			},
		},
	}

	for _, c := range cases {
		t.Run(c.name, func(t *testing.T) {
			got, err := c.path.Marshal()
			if err != nil && !c.expectError {
				t.Fatalf("unexpected error: %v", err)
			}
			if err == nil && c.expectError {
				t.Fatalf("expected error, got %x", got)
			}
			if err != nil && c.expectError {
				// Do not compare result in case error is expected
				return
			}
			if !bytes.Equal(got, c.expected) {
				t.Fatalf("expected %x, got %x", c.expected, got)
			}
			if _, err := UnmarshalDevicePath(got); err != nil {
				t.Errorf("failed to unmarshal value again: %v", err)
			}
		})
	}
}
