package port

import (
	"context"

	"github.com/orchard9/rdev/internal/domain"
)

// StorageProvisioner manages object storage buckets for projects.
type StorageProvisioner interface {
	// CreateProjectBucket creates a GCS bucket for the project with isolated permissions.
	// Returns credentials including bucket name, service account JSON, and public URL.
	CreateProjectBucket(ctx context.Context, projectID string) (*domain.StorageCredentials, error)

	// DeleteProjectBucket removes the bucket and all objects.
	// If force is true, deletes all objects first; otherwise fails if bucket not empty.
	DeleteProjectBucket(ctx context.Context, projectID string, force bool) error

	// GetProjectBucket checks if bucket exists and returns credentials (without secrets).
	GetProjectBucket(ctx context.Context, projectID string) (*domain.StorageCredentials, error)

	// TestConnection verifies GCS client can connect and has necessary permissions.
	TestConnection(ctx context.Context) error
}
