/**
 * API Client - Central Export
 *
 * This file exports all API services for easy import throughout the application.
 * All 60 backend endpoints are now connected to the frontend.
 *
 * Usage:
 *   import { login, searchCsvRates, createBooking } from '@/lib/api';
 */

// Base client utilities
export {
  getAuthToken,
  setAuthTokens,
  clearAuthTokens,
  createHeaders,
  apiRequest,
  get,
  post,
  patch,
  del,
  upload,
  download,
  ApiError,
} from './client';

// Authentication (8 endpoints)
export {
  register,
  login,
  refreshToken,
  logout,
  getCurrentUser,
  forgotPassword,
  resetPassword,
  sendContactForm,
} from './auth';

// Rates (4 endpoints)
export { searchRates, searchCsvRates, getAvailableCompanies, getFilterOptions } from './rates';

// Bookings (7 endpoints)
export {
  createBooking,
  getBooking,
  getBookingByNumber,
  listBookings,
  fuzzySearchBookings,
  advancedSearchBookings,
  exportBookings,
  updateBookingStatus,
  // CSV Bookings
  createCsvBooking,
  getCsvBooking,
  listCsvBookings,
  getCsvBookingStats,
  cancelCsvBooking,
  acceptCsvBooking,
  rejectCsvBooking,
  type CsvBookingResponse,
  type CsvBookingListResponse,
  type CsvBookingStatsResponse,
} from './bookings';

// Users (7 endpoints)
export {
  listUsers,
  getUser,
  createUser,
  updateUser,
  deleteUser,
  restoreUser,
  changePassword,
} from './users';

// Organizations (4 endpoints)
export {
  listOrganizations,
  getOrganization,
  createOrganization,
  updateOrganization,
} from './organizations';

// Notifications (7 endpoints)
export {
  listNotifications,
  getNotification,
  createNotification,
  markNotificationAsRead,
  markAllNotificationsAsRead,
  deleteNotification,
  getNotificationPreferences,
  updateNotificationPreferences,
} from './notifications';

// Audit Logs (5 endpoints)
export {
  listAuditLogs,
  getEntityAuditLogs,
  getUserAuditLogs,
  getAuditStats,
  exportAuditLogs,
} from './audit';

// Webhooks (7 endpoints)
export {
  listWebhooks,
  getWebhook,
  createWebhook,
  updateWebhook,
  deleteWebhook,
  testWebhook,
  listWebhookEvents,
} from './webhooks';

// GDPR (6 endpoints)
export {
  requestDataExport,
  requestDataExportCSV,
  requestAccountDeletion,
  getConsentPreferences,
  updateConsentPreferences,
  withdrawConsent,
  type CookiePreferences,
  type ConsentResponse,
  type UpdateConsentRequest,
} from './gdpr';

// Admin CSV Rates (5 endpoints) - already exists
export {
  uploadCsvRates,
  listCsvFiles,
  deleteCsvFile,
  getCsvFileStats,
  convertCsvFormat,
} from './admin/csv-rates';

// Dashboard (4 endpoints)
export {
  getKPIs,
  getBookingsChart,
  getTopTradeLanes,
  getAlerts,
  dashboardApi,
  type DashboardKPIs,
  type BookingsChartData,
  type TradeLane,
  type DashboardAlert,
} from './dashboard';

// Subscriptions (5 endpoints)
export {
  getSubscriptionOverview,
  getAllPlans,
  canInviteUser,
  createCheckoutSession,
  createPortalSession,
  formatPrice,
  getPlanBadgeColor,
  getStatusBadgeColor,
  type SubscriptionPlan,
  type SubscriptionStatus,
  type BillingInterval,
  type PlanDetails,
  type LicenseResponse,
  type SubscriptionOverviewResponse,
  type CanInviteResponse,
  type AllPlansResponse,
} from './subscriptions';

// Re-export as API objects for backward compatibility
import * as bookingsModule from './bookings';
import * as ratesModule from './rates';
import * as usersModule from './users';
import * as authModule from './auth';
import * as organizationsModule from './organizations';
import * as notificationsModule from './notifications';
import * as auditModule from './audit';
import * as webhooksModule from './webhooks';
import * as gdprModule from './gdpr';
import * as subscriptionsModule from './subscriptions';

export const bookingsApi = bookingsModule;
export const ratesApi = ratesModule;
export const usersApi = usersModule;
export const authApi = authModule;
export const organizationsApi = organizationsModule;
export const notificationsApi = notificationsModule;
export const auditApi = auditModule;
export const webhooksApi = webhooksModule;
export const gdprApi = gdprModule;
export const subscriptionsApi = subscriptionsModule;
