package s3fs

import "testing"

func TestNormalizeDirectoryMarkerModeConfigDefaultsToEmpty(t *testing.T) {
	mode, err := normalizeDirectoryMarkerModeConfig(map[string]interface{}{})
	if err != nil {
		t.Fatalf("unexpected error: %v", err)
	}
	if mode != DirectoryMarkerModeEmpty {
		t.Fatalf("expected default mode %q, got %q", DirectoryMarkerModeEmpty, mode)
	}
}

func TestNormalizeDirectoryMarkerModeConfigRejectsUnknownMode(t *testing.T) {
	_, err := normalizeDirectoryMarkerModeConfig(map[string]interface{}{
		"directory_marker_mode": "mystery",
	})
	if err == nil {
		t.Fatal("expected unknown mode error, got nil")
	}
}

func TestDirectoryMarkerPayload(t *testing.T) {
	payload, shouldCreate := directoryMarkerPayload(DirectoryMarkerModeNone)
	if shouldCreate {
		t.Fatal("expected none mode to skip marker creation")
	}
	if payload != nil {
		t.Fatalf("expected nil payload for none mode, got %v", payload)
	}

	payload, shouldCreate = directoryMarkerPayload(DirectoryMarkerModeEmpty)
	if !shouldCreate {
		t.Fatal("expected empty mode to create marker")
	}
	if len(payload) != 0 {
		t.Fatalf("expected empty marker payload, got %d bytes", len(payload))
	}

	payload, shouldCreate = directoryMarkerPayload(DirectoryMarkerModeNonEmpty)
	if !shouldCreate {
		t.Fatal("expected nonempty mode to create marker")
	}
	if len(payload) != 1 || payload[0] != '\n' {
		t.Fatalf("expected newline marker payload, got %v", payload)
	}
}

func TestShouldEnforceParentDirectoryExistence(t *testing.T) {
	client := &S3Client{directoryMarkerMode: DirectoryMarkerModeNone}
	if client.shouldEnforceParentDirectoryExistence() {
		t.Fatal("expected none mode to skip parent directory enforcement")
	}

	client.directoryMarkerMode = DirectoryMarkerModeEmpty
	if !client.shouldEnforceParentDirectoryExistence() {
		t.Fatal("expected empty mode to enforce parent directories")
	}

	client.directoryMarkerMode = DirectoryMarkerModeNonEmpty
	if !client.shouldEnforceParentDirectoryExistence() {
		t.Fatal("expected nonempty mode to enforce parent directories")
	}
}