//
// Copyright (c) StellaOps. Licensed under BUSL-1.1.
//
namespace StellaOps.Facet;
///
/// Represents a trackable slice of an image.
///
///
///
/// A facet defines a logical grouping of files within a container image
/// that can be tracked independently for sealing and drift detection.
///
///
/// Examples of facets: OS packages, language dependencies, binaries, config files.
///
///
public interface IFacet
{
///
/// Gets the unique identifier for this facet type.
///
///
/// Format: "{category}-{specifics}" e.g., "os-packages-dpkg", "lang-deps-npm".
///
string FacetId { get; }
///
/// Gets the human-readable name.
///
string Name { get; }
///
/// Gets the facet category for grouping.
///
FacetCategory Category { get; }
///
/// Gets the glob patterns or path selectors for files in this facet.
///
///
/// Selectors support:
///
/// - Glob patterns: "**/*.json", "/usr/bin/*"
/// - Exact paths: "/var/lib/dpkg/status"
/// - Directory patterns: "/etc/**"
///
///
IReadOnlyList Selectors { get; }
///
/// Gets the priority for conflict resolution when files match multiple facets.
///
///
/// Lower values = higher priority. A file matching multiple facets
/// will be assigned to the facet with the lowest priority value.
///
int Priority { get; }
}