// Re-export the shared, ORM-agnostic payment contract from @edr/types so consumers can
// import enums, interfaces, and providers from a single entry point.
export {
  ProviderPaymentStatus,
  ProviderMethod,
} from '@edr/types';
export type {
  PaymentProvider,
  ProviderInitiationInput,
  ProviderInitiationResult,
  ProviderStatus,
  ClientAction,
  PaymentPlatform,
} from '@edr/types';

// Providers
export { TelebirrProvider } from './providers/telebirr/telebirr.provider';
export { CbeBirrProvider } from './providers/cbe-birr/cbe-birr.provider';
export { EBirrProvider } from './providers/ebirr/ebirr.provider';
export { CardProvider } from './providers/card/card.provider';
export { WaafiProvider } from './providers/waafi/waafi.provider';
export { DMoneyProvider } from './providers/dmoney/dmoney.provider';
export { CacBankProvider } from './providers/cac-bank/cac-bank.provider';

// Telebirr crypto + types (exported for apps that build/verify signatures directly)
export {
  buildCanonicalString,
  signRequestObject,
  verifyRequestObject,
  signString,
  verifySignature,
  createTimestamp,
  createNonceStr,
  createMerchantOrderId,
} from './providers/telebirr/telebirr.crypto';
export type {
  FabricTokenResponse,
  CreateOrderRequest,
  CreateOrderResponse,
  QueryOrderResponse,
  TelebirrTradeStatus,
} from './providers/telebirr/telebirr.types';

// D-Money request/response types (exported for apps that build/inspect requests directly)
export type {
  DMoneyFabricTokenResponse,
  DMoneyPreOrderBizContent,
  DMoneyPreOrderRequest,
  DMoneyPreOrderResponse,
  DMoneyQueryOrderResponse,
  DMoneyOrderStatus,
} from './providers/dmoney/dmoney.types';

// Waafi HPP request/response types (exported for apps that build/inspect requests directly)
export type {
  WaafiState,
  WaafiHppPurchaseRequest,
  WaafiHppPurchaseResponse,
  WaafiGetTranInfoRequest,
  WaafiGetTranInfoResponse,
} from './providers/waafi/waafi.types';

// CAC Bank request/response types
export type {
  CacSigninRequest,
  CacSigninResponse,
  CacPaymentInitiateRequest,
  CacPaymentInitiateResponse,
  CacPaymentConfirmRequest,
  CacPaymentConfirmResponse,
  CacGetPaymentByReferenceRequest,
  CacPaymentByReferenceResponse,
  CacConfirmResult,
} from './providers/cac-bank/cac-bank.types';

// Webhook payload types
export type { TelebirrWebhookPayload } from './webhooks/telebirr-webhook.types';
export type { CbeBirrWebhookPayload } from './webhooks/cbe-birr-webhook.types';
export type { EBirrWebhookPayload } from './webhooks/ebirr-webhook.types';
export type { CardWebhookPayload } from './webhooks/card-webhook.types';
export type {
  WaafiWebhookPayload,
  WaafiWebhookTransactionPayload,
  WaafiWebhookTestPayload,
  WaafiWebhookHeaders,
  WaafiWebhookEvent,
  WaafiWebhookStatus,
} from './webhooks/waafi-webhook.types';
export type { DMoneyWebhookPayload } from './webhooks/dmoney-webhook.types';

// DI token for injecting all providers as an array (future multi-provider wiring)
export const PAYMENT_PROVIDERS = Symbol('PAYMENT_PROVIDERS');
