import {
  createFieldShopifyProduct,
  createFieldShopifyCollection,
} from "@reacteditor/field-shopify";

import { navigationEditor } from "@/components/navigation/navigation.editor";
import { footerEditor } from "@/components/footer/footer.editor";

import { heroEditor } from "@/components/hero/hero.editor";
import { bannerEditor } from "@/components/landing/banner.editor";

import { createFeaturedProductEditor } from "@/components/commerce/featured-product.editor";
import { createProductsGridEditor } from "@/components/commerce/products-grid.editor";
import { createProductsCarouselEditor } from "@/components/commerce/products-carousel.editor";
import { collectionGridEditor } from "@/components/commerce/collection-grid.editor";
import { createCollectionEditor } from "@/components/commerce/collection.editor";
import { createProductDetailsEditor } from "@/components/commerce/product-details.editor";
import { createRecommendedProductsEditor } from "@/components/commerce/recommended-products.editor";
import { searchProductsEditor } from "@/components/commerce/search-products.editor";

import { featuresEditor } from "@/components/features/features.editor";
import { testimonialsEditor } from "@/components/testimonials/testimonials.editor";
import { imageGalleryEditor } from "@/components/landing/image-gallery.editor";
import { newsletterCtaEditor } from "@/components/landing/newsletter-cta.editor";
import { logosEditor } from "@/components/logos/logos.editor";
import { ctaEditor } from "@/components/cta/cta.editor";
import { faqEditor } from "@/components/faq/faq.editor";

import Root from "@/config/root";
import type { UserConfig } from "@/config/types";

const SHOPIFY_DOMAIN =
  process.env.NEXT_PUBLIC_SHOPIFY_DOMAIN ?? "mock.shop";
const STOREFRONT_TOKEN =
  process.env.NEXT_PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN ?? "";

const productField = createFieldShopifyProduct({
  storeDomain: SHOPIFY_DOMAIN,
  storefrontAccessToken: STOREFRONT_TOKEN || undefined,
}) as any;

const collectionField = createFieldShopifyCollection({
  storeDomain: SHOPIFY_DOMAIN,
  storefrontAccessToken: STOREFRONT_TOKEN || undefined,
}) as any;

const categories = {
  navigation: { title: "Navigation" },
  hero: { title: "Hero & Banners" },
  commerce: { title: "Commerce" },
  content: { title: "Content" },
  footer: { title: "Footer" },
};

const sharedComponents = {
  navigation: navigationEditor,
  footer: footerEditor,
};

export const homeConfig: UserConfig = {
  root: Root,
  categories,
  components: {
    ...sharedComponents,
    hero: heroEditor,
    banner: bannerEditor,
    "featured-product": createFeaturedProductEditor({ productField }),
    "products-grid": createProductsGridEditor({ collectionField }),
    "products-carousel": createProductsCarouselEditor({ collectionField }),
    "collection-grid": collectionGridEditor,
    features: featuresEditor,
    testimonials: testimonialsEditor,
    "image-gallery": imageGalleryEditor,
    "newsletter-cta": newsletterCtaEditor,
    logos: logosEditor,
    cta: ctaEditor,
    faq: faqEditor,
  } as any,
};

export const productConfig: UserConfig = {
  root: Root,
  categories,
  components: {
    ...sharedComponents,
    "product-details": createProductDetailsEditor({ productField }),
    "recommended-products": createRecommendedProductsEditor({ productField }),
    "products-carousel": createProductsCarouselEditor({ collectionField }),
  } as any,
};

export const collectionsConfig: UserConfig = {
  root: Root,
  categories,
  components: {
    ...sharedComponents,
    collection: createCollectionEditor({ collectionField }),
  } as any,
};

export const searchConfig: UserConfig = {
  root: Root,
  categories,
  components: {
    ...sharedComponents,
    "search-products": searchProductsEditor,
  } as any,
};
