// src/client/shared/api/index.ts
// Exports all API infrastructure modules

// Errors
export {
  ContractError,
  ApiError,
  type ApiResponse,
  type ApiErrorResponse,
} from './errors';

// API Client
export {
  createApiClient,
  apiClient,
  api,
  type RequestConfig,
} from './api.client';

// Socket Service
export {
  socketService,
  useSocket,
  type EventCallback,
  type BatchedEventCallback,
  type BatchConfig,
} from './SocketService';

// Base Repository
export {
  BaseRepository,
  createRepository,
  type RepositoryConfig,
} from './BaseRepository';

// Repositories
export {
  authRepository,
  AuthRepository,
  type UserResponse,
  type LoginRequest,
  type LoginResponse,
  type LogoutResponse,
  userResponseSchema,
  loginRequestSchema,
  loginResponseSchema,
  logoutResponseSchema,
} from './repositories/AuthRepository';

export {
  roomsRepository,
  RoomsRepository,
  type RoomResponse,
  type CreateRoomRequest,
  type UpdateRoomRequest,
  type DeleteRoomResponse,
  roomResponseSchema,
  roomListResponseSchema,
  createRoomRequestSchema,
  updateRoomRequestSchema,
  deleteRoomResponseSchema,
  roomTypeEnum,
  roomIdSchema,
} from './repositories/RoomsRepository';

export {
  employeeRepository,
  EmployeeRepository,
  type EmployeeResponse,
  type CreateEmployeeRequest,
  type UpdateEmployeeRequest,
  type FireEmployeeRequest,
  type RehireEmployeeRequest,
  type CheckUsernameRequest,
  type CheckUsernameResponse,
  employeeResponseSchema,
  employeesListResponseSchema,
  createEmployeeRequestSchema,
  updateEmployeeRequestSchema,
  fireEmployeeRequestSchema,
  rehireEmployeeRequestSchema,
  checkUsernameRequestSchema,
  checkUsernameResponseSchema,
  maidPeriodSchema,
  maidPeriodResponseSchema,
} from './repositories/EmployeeRepository';

export {
  inventoryRepository,
  InventoryRepository,
  type InventoryResponse,
  type CreateInventoryRequest,
  type UpdateInventoryRequest,
  type InventoryCategory,
  inventoryResponseSchema,
  inventoryListResponseSchema,
  createInventoryRequestSchema,
  updateInventoryRequestSchema,
  inventoryCategorySchema,
} from './repositories/InventoryRepository';
