/**
 * HANA Query API Client - Public Exports
 * 
 * Main entry point for the HANA Query API client module.
 * Exports all public types, classes, and utilities.
 */

// Import for default export
import { HanaQueryClient } from './hana-query-client.ts';

// ============================================================================
// Main Client Export
// ============================================================================

export { 
  HanaQueryClient, 
  RequestBuilder,
  createClient,
  createClientFromEnvironment
  // defaultClient removed - requires explicit baseUrl configuration
} from './hana-query-client.ts';

// ============================================================================
// Type Definitions
// ============================================================================

// Base response types
export type {
  BaseAPIResponse,
  SuccessResponse,
  ErrorResponse,
  APIResponse,
  ProblemDetails
} from './types.ts';

// Request types
export type {
  SalesParams,
  SearchCriteria,
  RequestOptions,
  ClientConfig
} from './types.ts';

// Response types for each endpoint
export type {
  HealthResponse,
  HealthData,
  DocsResponse,
  DocsData,
  ItemsStatusResponse,
  ItemsStatusData,
  ItemsStatusMetadata,
  ItemGroupsResponse,
  ItemGroupsData,
  ItemGroupsMetadata,
  SalesResponse,
  SalesData,
  SalesMetadata,
  HierarchiesResponse,
  HierarchiesData,
  HierarchiesMetadata,
  TreesResponse,
  TreesData,
  TreesMetadata,
  QtyPerTagResponse,
  QtyPerTagData,
  QtyPerTagMetadata,
  PlansResponse,
  PlansData,
  PlansMetadata,
  SinglePlanResponse,
  SinglePlanData,
  SinglePlanMetadata,
  PlanProductsResponse,
  PlanProductsData,
  PlanProductsMetadata,
  PlanWorkOrdersResponse,
  PlanWorkOrdersData,
  PlanWorkOrdersMetadata,
  PlanTagsResponse,
  PlanTagsData,
  PlanTagsMetadata,
  PlanSectorsSummaryResponse,
  PlanSectorsSummaryData,
  PlanSectorsSummaryMetadata,
  AllPlansSectorsSummaryResponse,
  AllPlansSectorsSummaryData,
  AllPlansSectorsSummaryMetadata,
  UserResponse,
  UserData,
  UserMetadata,
  TagResponse,
  TagData,
  TagMetadata,
  WorkOrderTagsResponse,
  WorkOrderTagsData,
  WorkOrderTagsMetadata,
  InjectionMachinesResponse,
  InjectionMachinesData,
  InjectionMachinesMetadata,
  SingleInjectionMachineResponse,
  SingleInjectionMachineData,
  SingleInjectionMachineMetadata,
  MoldsResponse,
  MoldsData,
  MoldsMetadata,
  SingleMoldResponse,
  SingleMoldData,
  SingleMoldMetadata,
  BusinessPartnersResponse,
  BusinessPartnersData,
  BusinessPartnersMetadata,
  BusinessPartnersSearchResponse,
  BusinessPartnersSearchMetadata,
  ContactsResponse,
  ContactsData,
  ContactsMetadata,
  ContactsSearchResponse,
  ContactsSearchMetadata,
  BusinessPartnerContactsResponse,
  BusinessPartnerContactsMetadata
} from './types.ts';

// Entity types
export type {
  ItemStatus,
  ItemGroup,
  SalesItem,
  Hierarchy,
  Tree,
  QtyPerTag,
  Tag,
  TagUsage,
  TagStatus,
  InjectionMachine,
  Mold,
  Plan,
  PlanProduct,
  WorkOrder,
  PlanTag,
  PlanSectorSummary,
  BusinessPartner,
  Contact
} from './types.ts';

// Utility types
export type {
  APIResponseHeaders,
  RequestContext,
  ClientErrorType,
  ClientErrorDetails,
  ExtractData,
  ExtractMetadata,
  EndpointMap,
  AnyAPIResponse
} from './types.ts';

// Type guards
export {
  isSuccessResponse,
  isErrorResponse
} from './types.ts';

// Response helpers
export {
  safeExtractData,
  safeExtractMetadata,
  getErrorDetails,
  isSuccess,
  isError,
  transformResponseData,
  combineResponses
} from './response-helpers.ts';

// ============================================================================
// Error Classes
// ============================================================================

export {
  HanaQueryClientError,
  NetworkError,
  TimeoutError,
  ValidationError,
  AuthorizationError,
  NotFoundError,
  ServerError,
  UnknownError
} from './errors.ts';

// Error utilities
export {
  createErrorFromResponse,
  createNetworkError,
  isRetryableError,
  getRetryDelay,
  isNetworkError,
  isTimeoutError,
  isValidationError,
  isAuthorizationError,
  isNotFoundError,
  isServerError,
  isHanaQueryClientError
} from './errors.ts';

// ============================================================================
// Configuration
// ============================================================================

export {
  DEFAULT_CONFIG,
  ENVIRONMENT_CONFIGS,
  API_VERSION,
  API_BASE_PATH,
  ENDPOINTS,
  HTTP_STATUS,
  ENDPOINT_TIMEOUTS,
  RETRY_CONFIG,
  HEADERS,
  AUTH_STATUS,
  createConfig,
  createConfigFromEnvironment,
  getEndpointTimeout,
  validateConfig,
  getApiUrl,
  replacePathParams,
  buildQueryString
} from './config.ts';

// ============================================================================
// Convenience Exports (Removed due to circular dependency issues)
// ============================================================================
// NOTE: The convenience exports have been removed to fix TypeScript compilation
// errors. Users should import and use the client directly:
//
// import { HanaQueryClient, createClient } from '@ritas-inc/hanaqueryapi-client';
// const client = createClient({ baseUrl: 'http://localhost:3000' });
//
// The following utilities can still be implemented in user code as needed.

// ============================================================================
// Default Export
// ============================================================================

/**
 * Default export is the main client class for CommonJS compatibility
 */
export default HanaQueryClient;

// ============================================================================
// Version Information
// ============================================================================

export const VERSION = '1.0.0';
export const CLIENT_NAME = 'hana-query-client';

/**
 * Module metadata
 */
export const meta = {
  name: CLIENT_NAME,
  version: VERSION,
  description: 'TypeScript client for HANA Query API',
  capabilities: [
    'Full TypeScript support',
    'Automatic retry logic',
    'Request/response logging',
    'Error handling with custom error types',
    'Configurable timeouts and retries',
    'Multiple environment support',
    'Fluent request builder API',
    'Type-safe responses',
    'Header-based authorization checking'
  ]
} as const;