// Package port defines interfaces (ports) for external dependencies.
// These interfaces define the contracts between the application core and
// infrastructure adapters, enabling testability and flexibility.
package port

import (
	"context"

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

// ProjectRepository defines operations for managing projects.
type ProjectRepository interface {
	// List returns all available projects.
	List(ctx context.Context) ([]domain.Project, error)

	// Get returns a project by ID.
	Get(ctx context.Context, id domain.ProjectID) (*domain.Project, error)

	// Exists checks if a project exists.
	Exists(ctx context.Context, id domain.ProjectID) (bool, error)

	// Register adds a new project to the repository.
	Register(ctx context.Context, project *domain.Project) error

	// Unregister removes a project from the repository.
	Unregister(ctx context.Context, id domain.ProjectID) error

	// RefreshStatus updates the status of all projects.
	RefreshStatus(ctx context.Context) error
}
