// Database Helper - SQLite (Cloudflare D1)
// Main entry point for the package

// Re-export database connection
export { db, initDb } from './src/db/db_index'
// Re-export schema
export * from './src/db/schema'

// Export enum types for type safety
export { staffRoleEnum, staffPermissionEnum } from './src/db/schema'

// Admin API helpers - explicitly namespaced exports to avoid duplicates
export {
  // Banner
  getBanners,
  getBannerById,
  createBanner,
  updateBanner,
  deleteBanner,
} from './src/admin-apis/banner'

export {
  // Complaint
  getComplaints,
  getComplaintById,
  resolveComplaint,
} from './src/admin-apis/complaint'

export {
  // Constants
  getAllConstants,
  upsertConstants,
  getCacheVersion,
  incrementCacheVersion,
} from './src/admin-apis/const'

export {
  // Coupon
  getAllCoupons,
  getCouponById,
  invalidateCoupon,
  validateCoupon,
  getReservedCoupons,
  getUsersForCoupon,
  createCouponWithRelations,
  updateCouponWithRelations,
  generateCancellationCoupon,
  createReservedCouponWithProducts,
  createCouponForUser,
  checkUsersExist,
  checkCouponExists,
  checkReservedCouponExists,
  getOrderWithUser,
} from './src/admin-apis/coupon'

export {
  // Order
  updateOrderNotes,
  getOrderDetails,
  updateOrderPackaged,
  updateOrderDelivered,
  updateOrderItemPackaging,
  removeDeliveryCharge,
  getSlotOrders,
  updateAddressCoords,
  getAllOrders,
  rebalanceSlots,
  cancelOrder,
  deleteOrderById,
} from './src/admin-apis/order'

export {
  // Product
  getAllProducts,
  getProductById,
  deleteProduct,
  createProduct,
  updateProduct,
  checkProductExistsByName,
  checkUnitExists,
  getProductImagesById,
  createSpecialDealsForProduct,
  updateProductDeals,
  replaceProductTags,
  toggleProductOutOfStock,
  updateSlotProducts,
  getSlotProductIds,
  getSlotsProductIds,
  getAllUnits,
  getAllProductTags,
  getAllProductTagInfos,
  getProductTagInfoById,
  createProductTag,
  getProductTagById,
  updateProductTag,
  deleteProductTag,
  checkProductTagExistsByName,
  getProductReviews,
  respondToReview,
  getAllProductGroups,
  createProductGroup,
  updateProductGroup,
  deleteProductGroup,
  addProductToGroup,
  removeProductFromGroup,
  updateProductPrices,
} from './src/admin-apis/product'

export {
  // Slots
  getActiveSlotsWithProducts,
  getActiveSlots,
  getSlotsAfterDate,
  getSlotByIdWithRelations,
  createSlotWithRelations,
  updateSlotWithRelations,
  deleteSlotById,
  updateSlotCapacity,
  getSlotDeliverySequence,
  updateSlotDeliverySequence,
  staleSlotsCleanup,
} from './src/admin-apis/slots'

export {
  // Staff User
  getStaffUserByName,
  getStaffUserById,
  getAllStaff,
  getAllUsers,
  getUserWithDetails,
  updateUserSuspensionStatus,
  checkStaffUserExists,
  checkStaffRoleExists,
  createStaffUser,
  getAllRoles,
} from './src/admin-apis/staff-user'

export {
  // Store
  getAllStores,
  getStoreById,
  createStore,
  updateStore,
  deleteStore,
} from './src/admin-apis/store'

export {
  // User
  createUserByMobile,
  getUserByMobile,
  getUnresolvedComplaintsCount,
  getAllUsersWithFilters,
  getOrderCountsByUserIds,
  getLastOrdersByUserIds,
  getSuspensionStatusesByUserIds,
  getUserBasicInfo,
  getUserSuspensionStatus,
  getUserOrders,
  getOrderStatusesByOrderIds,
  getItemCountsByOrderIds,
  upsertUserSuspension,
  searchUsers,
  getAllNotifCreds,
  getAllUnloggedTokens,
  getNotifTokensByUserIds,
  getUserIncidentsWithRelations,
  createUserIncident,
} from './src/admin-apis/user'

export {
  // Vendor Snippets
  checkVendorSnippetExists,
  getVendorSnippetById,
  getVendorSnippetByCode,
  getAllVendorSnippets,
  createVendorSnippet,
  updateVendorSnippet,
  deleteVendorSnippet,
  getProductsByIds,
  getVendorSlotById,
  getVendorOrdersBySlotId,
  getOrderItemsByOrderIds,
  getOrderStatusByOrderIds,
  updateVendorOrderItemPackaging,
  getVendorOrders,
} from './src/admin-apis/vendor-snippets'

export {
  // User Address
  getDefaultAddress as getUserDefaultAddress,
  getUserAddresses,
  getUserAddressById,
  clearDefaultAddress as clearUserDefaultAddress,
  createUserAddress,
  updateUserAddress,
  deleteUserAddress,
  hasOngoingOrdersForAddress,
} from './src/user-apis/address'

export {
  // User Banners
  getActiveBanners as getUserActiveBanners,
} from './src/user-apis/banners'

export {
  // User Cart
  getCartItemsWithProducts as getUserCartItemsWithProducts,
  getProductById as getUserProductById,
  getCartItemByUserProduct as getUserCartItemByUserProduct,
  incrementCartItemQuantity as incrementUserCartItemQuantity,
  insertCartItem as insertUserCartItem,
  updateCartItemQuantity as updateUserCartItemQuantity,
  deleteCartItem as deleteUserCartItem,
  clearUserCart,
} from './src/user-apis/cart'

export {
  // User Complaint
  getUserComplaints as getUserComplaints,
  createComplaint as createUserComplaint,
} from './src/user-apis/complaint'

export {
  // User Stores
  getStoreSummaries as getUserStoreSummaries,
  getStoreDetail as getUserStoreDetail,
} from './src/user-apis/stores'

export {
  // User Product
  getProductDetailById as getUserProductDetailById,
  getProductReviews as getUserProductReviews,
  getProductById as getUserProductByIdBasic,
  createProductReview as createUserProductReview,
  getAllProductsWithUnits,
  type ProductSummaryData,
} from './src/user-apis/product'

export {
  // User Slots
  getActiveSlotsList as getUserActiveSlotsList,
  getProductAvailability as getUserProductAvailability,
} from './src/user-apis/slots'

export {
  // User Payments
  getOrderById as getUserPaymentOrderById,
  getPaymentByOrderId as getUserPaymentByOrderId,
  getPaymentByMerchantOrderId as getUserPaymentByMerchantOrderId,
  updatePaymentSuccess as updateUserPaymentSuccess,
  updateOrderPaymentStatus as updateUserOrderPaymentStatus,
  markPaymentFailed as markUserPaymentFailed,
} from './src/user-apis/payments'

export {
  // User Auth
  getUserByEmail as getUserAuthByEmail,
  getUserByMobile as getUserAuthByMobile,
  getUserById as getUserAuthById,
  getUserCreds as getUserAuthCreds,
  getUserDetails as getUserAuthDetails,
  isUserSuspended,
  createUserWithCreds as createUserAuthWithCreds,
  createUserWithMobile as createUserAuthWithMobile,
  upsertUserPassword as upsertUserAuthPassword,
  deleteUserAccount as deleteUserAuthAccount,
  // UV API helpers
  createUserWithProfile,
  getUserDetailsByUserId,
  updateUserProfile,
} from './src/user-apis/auth'

export {
  // User Coupon
  getActiveCouponsWithRelations as getUserActiveCouponsWithRelations,
  getAllCouponsWithRelations as getUserAllCouponsWithRelations,
  getReservedCouponByCode as getUserReservedCouponByCode,
  redeemReservedCoupon as redeemUserReservedCoupon,
} from './src/user-apis/coupon'

export {
  // User Profile
  getUserById as getUserProfileById,
  getUserDetailByUserId as getUserProfileDetailById,
  getUserWithCreds as getUserWithCreds,
  getNotifCred as getUserNotifCred,
  upsertNotifCred as upsertUserNotifCred,
  deleteUnloggedToken as deleteUserUnloggedToken,
  getUnloggedToken as getUserUnloggedToken,
  upsertUnloggedToken as upsertUserUnloggedToken,
} from './src/user-apis/user'

export {
  // User Order
  validateAndGetCoupon as validateAndGetUserCoupon,
  applyDiscountToOrder as applyDiscountToUserOrder,
  getAddressByIdAndUser as getUserAddressByIdAndUser,
  getProductById as getOrderProductById,
  checkUserSuspended,
  getSlotCapacityStatus as getUserSlotCapacityStatus,
  placeOrderTransaction as placeUserOrderTransaction,
  deleteCartItemsForOrder as deleteUserCartItemsForOrder,
  recordCouponUsage as recordUserCouponUsage,
  getOrdersWithRelations as getUserOrdersWithRelations,
  getOrderCount as getUserOrderCount,
  getOrderByIdWithRelations as getUserOrderByIdWithRelations,
  getCouponUsageForOrder as getUserCouponUsageForOrder,
  getOrderBasic as getUserOrderBasic,
  cancelOrderTransaction as cancelUserOrderTransaction,
  updateOrderNotes as updateUserOrderNotes,
  getRecentlyDeliveredOrderIds as getUserRecentlyDeliveredOrderIds,
  getProductIdsFromOrders as getUserProductIdsFromOrders,
  getProductsForRecentOrders as getUserProductsForRecentOrders,
  // Post-order handler helpers
  getOrdersByIdsWithFullData,
  getOrderByIdWithFullData,
  type OrderWithFullData,
  type OrderWithCancellationData,
} from './src/user-apis/order'

// Store Helpers (for cache initialization)
export {
  // Banner Store
  getAllBannersForCache,
  type BannerData,
  // Product Store
  getAllProductsForCache,
  getAllStoresForCache,
  getAllDeliverySlotsForCache,
  getAllSpecialDealsForCache,
  getAllProductTagsForCache,
  type ProductBasicData,
  type StoreBasicData,
  type DeliverySlotData,
  type SpecialDealData,
  type ProductTagData,
  // Product Tag Store
  getAllTagsForCache,
  getAllTagProductMappings,
  type TagBasicData,
  type TagProductMapping,
  // Slot Store
  getAllSlotsWithProductsForCache,
  type SlotWithProductsData,
  // User Negativity Store
  getAllUserNegativityScores,
  getUserNegativityScore,
  type UserNegativityData,
} from './src/stores/store-helpers'

// Automated Jobs Helpers
export {
  toggleFlashDeliveryForItems,
  toggleKeyVal,
  getAllKeyValStore,
} from './src/lib/automated-jobs'

// Health Check
export {
  healthCheck,
} from './src/lib/health-check'

// Common API Helpers
export {
  getSuspendedProductIds,
  getNextDeliveryDateWithCapacity,
} from './src/user-apis/product'

export {
  getStoresSummary,
} from './src/user-apis/stores'

// Delete Orders Helper
export {
  deleteOrdersWithRelations,
} from './src/lib/delete-orders'

// Upload URL Helpers
export {
  createUploadUrlStatus,
  claimUploadUrlStatus,
} from './src/helper_methods/upload-url'

// Seed Helpers
export {
  seedUnits,
  seedStaffRoles,
  seedStaffPermissions,
  seedRolePermissions,
  seedKeyValStore,
  type UnitSeedData,
  type RolePermissionAssignment,
  type KeyValSeedData,
  type StaffRoleName,
  type StaffPermissionName,
} from './src/lib/seed'
