/**
 * Brainy Integration Hub
 *
 * Connect Brainy to external tools with zero configuration:
 * - Google Sheets (two-way sync)
 * - Excel / Power BI / Tableau (OData 4.0)
 * - Real-time dashboards (SSE streaming)
 * - External webhooks (push notifications)
 *
 * @example Enable integrations (recommended)
 * ```typescript
 * import { Brainy } from '@soulcraft/brainy'
 *
 * const brain = new Brainy({ integrations: true })
 * await brain.init()
 *
 * // Access the hub
 * console.log(brain.hub.endpoints)
 * // { odata: '/odata', sheets: '/sheets', sse: '/events', webhooks: '/webhooks' }
 *
 * // Handle requests (Express, Hono, etc.)
 * app.all('/odata/*', async (req, res) => {
 *   const response = await brain.hub.handleRequest(req)
 *   res.status(response.status).json(response.body)
 * })
 * ```
 */

// ============================================================================
// Integration Hub (used internally by brain.hub)
// ============================================================================

export {
  IntegrationHub,
  createIntegrationHub,
  type IntegrationHubConfig,
  type IntegrationRequest,
  type IntegrationResponse
} from './core/IntegrationHub.js'

// ============================================================================
// Core Infrastructure
// ============================================================================

export {
  // Event system for real-time updates
  EventBus,
  // Entity → rows/columns conversion
  TabularExporter,
  // Base class for custom integrations
  IntegrationBase,
  // Lazy-loading manager
  IntegrationLoader,
  createIntegrationLoader,
  // Environment detection
  detectEnvironment,
  // Integration catalog
  INTEGRATION_CATALOG
} from './core/index.js'

// Types
export type {
  HTTPIntegration,
  StreamingIntegration,
  IntegrationType,
  RuntimeEnvironment,
  IntegrationInfo,
  IntegrationLoaderConfig
} from './core/index.js'

export type {
  BrainyEvent,
  EventFilter,
  EventHandler,
  EventSubscription,
  TabularRow,
  RelationTabularRow,
  TabularExporterConfig,
  IntegrationConfig,
  IntegrationHealthStatus,
  ODataQueryOptions,
  WebhookRegistration,
  WebhookDeliveryResult
} from './core/index.js'

// ============================================================================
// Individual Integrations
// ============================================================================

/**
 * OData 4.0 Integration
 *
 * Connect Excel Power Query, Power BI, Tableau, and any OData client.
 */
export { ODataIntegration, type ODataConfig } from './odata/index.js'

/**
 * Google Sheets Integration
 *
 * Two-way sync between Brainy and Google Sheets via Apps Script.
 */
export { GoogleSheetsIntegration, type GoogleSheetsConfig } from './sheets/index.js'

/**
 * SSE Streaming Integration
 *
 * Real-time event streaming via Server-Sent Events.
 */
export { SSEIntegration, type SSEConfig } from './sse/index.js'

/**
 * Webhook Integration
 *
 * Push events to external URLs with retry and signing.
 */
export { WebhookIntegration, type WebhookConfig } from './webhooks/index.js'

// ============================================================================
// OData Utilities (for advanced use)
// ============================================================================

export {
  parseODataQuery,
  parseFilter,
  parseOrderBy,
  parseSelect,
  odataToFindParams,
  applyFilter,
  applySelect,
  applyOrderBy,
  applyPagination
} from './odata/ODataQueryParser.js'

export {
  generateEdmx,
  generateMetadataJson,
  generateServiceDocument
} from './odata/EdmxGenerator.js'
