package disk_test

import (
	"testing"

	"koti.casa/numenor-labs/dsfx/pkg/disk"
)

func TestDefaultDisk(t *testing.T) {
	// Create a new disk instance using the default implementation
	d := disk.Default()

	// Test creating a directory
	dirName := "testdir"
	if err := d.Mkdir(dirName, 0755); err != nil {
		t.Fatalf("Failed to create directory: %v", err)
	}

	// Test creating a file
	fileName := "testfile.txt"
	file, err := d.Create(fileName)
	if err != nil {
		t.Fatalf("Failed to create file: %v", err)
	}
	defer file.Close()

	// Test writing to the file
	if _, err := file.Write([]byte("Hello, World!")); err != nil {
		t.Fatalf("Failed to write to file: %v", err)
	}

	// Test statting the file
	info, err := d.Stat(fileName)
	if err != nil {
		t.Fatalf("Failed to stat file: %v", err)
	}
	if info.Name() != fileName {
		t.Errorf("Expected file name %s, got %s", fileName, info.Name())
	}

	// Test opening the file
	openFile, err := d.Open(fileName)
	if err != nil {
		t.Fatalf("Failed to open file: %v", err)
	}
	defer openFile.Close()

	// Test removing the file
	if err := d.Remove(fileName); err != nil {
		t.Fatalf("Failed to remove file: %v", err)
	}

	// Test removing the directory
	if err := d.Remove(dirName); err != nil {
		t.Fatalf("Failed to remove directory: %v", err)
	}
}