//! GeoGraphDB Core - 3D Spatial Indexing for Graph Databases

pub mod acceleration;
pub mod algorithms;
pub mod cfg_store;
pub mod cypher_4d;
pub mod spatial;
pub mod storage;
pub mod telemetry;

// Re-export commonly used types
pub use algorithms::astar::{CfgGraphNode, CfgPath, PathComplexity};
pub use algorithms::complexity::{ComplexityBlock, ComplexityRating, ComplexityResult};
pub use algorithms::dominance::{compute_dominance, compute_dominance_frontier, DominanceResult};
pub use algorithms::four_d::{
    articulation_points_4d, astar_find_path_4d, bridges_4d, earliest_arrival_path_4d,
    fastest_temporal_path_4d, reachable_4d, strongly_connected_components_4d,
    time_dependent_dijkstra_4d, GraphNode4D, GraphPath4D, GraphProperties, SpatialRegion,
    TemporalArrival4D, TemporalDijkstraResult4D, TemporalEdge, TemporalJourney4D, TemporalWindow,
    TraversalContext4D,
};
pub use algorithms::loop_detection::{LoopAnalysisResult, LoopBlock, LoopInfo};
pub use algorithms::natural_loops::{find_back_edges, find_natural_loops, NaturalLoop};
pub use algorithms::scc::{condense_graph, find_cycles, has_cycles, tarjan_scc, SccResult};
pub use algorithms::slicing::{backward_slice, forward_slice, SliceResult};
pub use algorithms::topo_sort::{
    critical_path_length, is_dag, topological_sort, TopoError, TopoResult,
};
pub use algorithms::transitive::{transitive_closure, transitive_reduction, ReachabilityResult};
pub use cypher_4d::{query_4d, GeoCypherError, GeoCypherResult, GeoCypherRow};
pub use telemetry::{LoopGuard, OpTracer};

// Re-export dual-octree spatial page storage types
pub use storage::{
    build_spatial_pages, BoundingBox, DualEdgeType, DualGraph, DualVertex, OctreeNode,
    OctreePageStore, SpatialPage, SpatialPageHeader,
};

/// Library version
pub const VERSION: &str = env!("CARGO_PKG_VERSION");

// Re-export sectioned storage types
pub use storage::{
    GeoFileHeader, Section, SectionEntry, SectionedStorage, FILE_MAGIC, FORMAT_VERSION,
    HEADER_SIZE, HEADER_SIZE_USIZE, MAX_SECTION_NAME_LEN, SECTION_ENTRY_SIZE,
    SECTION_ENTRY_SIZE_USIZE,
};

// Re-export sidecar path helpers
pub use storage::{all_sidecar_paths, geo_cfg_path, geo_complexity_path, geo_idx_path};

// Re-export Graph4D persistence helpers
pub use storage::{load_graph4d, save_graph4d};

// Re-export section adapters
pub use storage::{
    CfgData, CfgEdge, CfgSectionAdapter, GraphData, GraphSectionAdapter, SerializableCfgBlock,
};

// Re-export property store types
pub use storage::prop_store::{build_prop_store, lookup, read_prop_store, write_prop_store};
pub use storage::prop_store::{NodeProperties, PropLookupEntry, PropStore, PropertyValue};
