import {
  AlqoveClient,
  createAuthEndpoints,
  createUserEndpoints,
  createStoreEndpoints,
  createStorefrontEndpoints,
  createItemEndpoints,
  createCategoryEndpoints,
  createCartEndpoints,
  createCheckoutEndpoints,
  createNotificationEndpoints,
  createPurchaseEndpoints,
  createOrderEndpoints,
  createStripeEndpoints,
  createSellerEndpoints,
  createAdminEndpoints,
  createMessageEndpoints,
  createMeEndpoints,
  createReturnEndpoints,
  createAdminReturnEndpoints,
  createBalanceEndpoints,
  createPayoutEndpoints,
  createAdminFinancialsEndpoints,
  createStatementsEndpoints,
  createReviewEndpoints,
  createReviewReportEndpoints,
  createTeamEndpoints,
  createSchedulingEndpoints,
  createTimekeepingEndpoints,
} from '@alqove/api-client';

const client = new AlqoveClient({
  baseUrl: process.env.NEXT_PUBLIC_API_URL || 'http://localhost:8000',
  getToken: () => {
    if (typeof window === 'undefined') return null;
    return localStorage.getItem('auth_token');
  },
});

const reviewReports = createReviewReportEndpoints(client);

export const api = {
  client,
  auth: createAuthEndpoints(client),
  users: createUserEndpoints(client),
  stores: createStoreEndpoints(client),
  storefront: createStorefrontEndpoints(client),
  items: createItemEndpoints(client),
  categories: createCategoryEndpoints(client),
  cart: createCartEndpoints(client),
  checkout: createCheckoutEndpoints(client),
  notifications: createNotificationEndpoints(client),
  purchases: createPurchaseEndpoints(client),
  orders: createOrderEndpoints(client),
  stripe: createStripeEndpoints(client),
  seller: createSellerEndpoints(client),
  admin: {
    ...createAdminEndpoints(client),
    returns: createAdminReturnEndpoints(client),
    financials: createAdminFinancialsEndpoints(client),
    reviewReports: {
      list: reviewReports.adminList,
      resolve: reviewReports.adminResolve,
      hideReview: reviewReports.adminHideReview,
      restoreReview: reviewReports.adminRestoreReview,
      storeReviews: reviewReports.adminStoreReviews,
    },
  },
  messages: createMessageEndpoints(client),
  me: createMeEndpoints(client),
  returns: createReturnEndpoints(client),
  balance: createBalanceEndpoints(client),
  payouts: createPayoutEndpoints(client),
  statements: createStatementsEndpoints(client),
  reviews: createReviewEndpoints(client),
  team: createTeamEndpoints(client),
  scheduling: createSchedulingEndpoints(client),
  timekeeping: createTimekeepingEndpoints(client),
  reviewReports: {
    report: reviewReports.report,
  },
};
