namespace GitConverter.Lib.Models
{
///
/// Canonical file-type identifiers used by converters and tests.
///
///
/// Purpose
/// - Provide a compact, stable set of logical identifiers for common GIS/vector file formats
/// used across the library (converters, orchestration, tests and READMEs).
///
/// How to use
/// - Map user-facing converter option keys (for example "Csv", "GeoJson", "Shapefile")
/// to this enum via when composing
/// deterministic output file names or test expectations.
/// - Obtain the canonical dot-prefixed suffix using .
/// Example:
/// var fe = FileExtensionHelpers.FromOption("Csv");
/// var ext = fe.HasValue ? fe.Value.ToDotExtension() : FileExtension.Csv.ToDotExtension();
/// var outFile = Path.Combine(outputFolder, $"output_{timestamp}{ext}");
///
/// Rationale
/// - Centralizing extension decisions avoids scattered literal strings (".csv", ".shp", ".json")
/// and reduces the chance of inconsistencies across converters and tests.
/// - Enum values represent logical formats (drivers) rather than file system details; the
/// mapping to a physical suffix is defined by the helpers.
///
/// Stability and evolution
/// - Additions to this enum are backwards compatible for callers that use the enum by name.
/// - If you must change a canonical suffix (for example change FileGdb from ".gdbtable"
/// to ".gdb"), change only the mapping in the helpers and update tests accordingly.
///
/// Note on FileGdb
/// - The project currently maps FileGdb to ".gdbtable" per repository convention. Change
/// that mapping in FileExtensionHelpers if you prefer the more common ".gdb".
///
/// Thread-safety
/// - The enum is a pure value type and safe for concurrent use.
///
public enum FileExtension
{
Csv,
EsriJson,
FileGdb,
GeoJson,
GeoJsonSeq,
GeoPackage,
Gml,
Gpx,
Kml,
Kmz,
MapInfoInterchange,
MapInfoTab,
OsmXml,
Shapefile,
TopoJson
}
}