src/hooks/swiper-slider-init.tsx'use client'import { useEffect, useRef } from 'react'import Swiper from 'swiper'import {Pagination,Autoplay,EffectFade,Navigation,Keyboard,} from 'swiper/modules'import { useInView } from 'react-intersection-observer'import 'swiper/css'import 'swiper/css/autoplay'import 'swiper/css/effect-fade'import 'swiper/css/navigation'interface SwiperSliderInitProps {swiperId: stringlayout?: 'slider' | 'carousel'columns?: 2 | 3 | undefinedautoHeight?: boolean}const SwiperSliderInit = ({swiperId,layout = 'slider',columns,autoHeight = true,}: SwiperSliderInitProps) => {const initializedRef = useRef(false)const swiperInstanceRef = useRef<Swiper | null>(null)const { ref, inView } = useInView({threshold: 0.9,})useEffect(() => {const swiperContainer = document.getElementById(swiperId)if (swiperContainer) {ref(swiperContainer)}}, [swiperId, ref])useEffect(() => {const swiper = swiperInstanceRef.currentif (!swiper) returnif (inView) {// Configure and start autoplay when in viewif (swiper.params) {swiper.params.autoplay = {delay: 4500,pauseOnMouseEnter: false,disableOnInteraction: true,}}swiper.autoplay?.start()} else {swiper.autoplay?.stop()}}, [inView])useEffect(() => {if (initializedRef.current) return // Ensure initialization only happens onceconst swiperContainer = document.getElementById(swiperId)if (!swiperContainer) return// Initialize Swiper with layout-specific configconst config: any = {modules: [Pagination, Autoplay, EffectFade, Navigation, Keyboard],spaceBetween: 30,autoHeight,observer: true,observeParents: true,keyboard: {enabled: true,onlyInViewport: true,},autoplay: false, // Autoplay enabled only when in viewon: {init: function () {// Fade in swiper after initializationswiperContainer.classList.remove('opacity-0')swiperContainer.classList.add('opacity-100')},},}if (layout === 'slider') {config.pagination = {el: `#${swiperId} .swiper-pagination`,clickable: true,}config.navigation = {prevEl: `.swiper-button-prev-${swiperId}`,nextEl: `.swiper-button-next-${swiperId}`,}if (!columns) {config.loop = trueconfig.effect = 'fade'config.fadeEffect = { crossFade: true }}if (columns) {config.slidesPerView = 1config.breakpoints = {768: { slidesPerView: columns === 2 ? 2 : 2 },1024: { slidesPerView: columns },}}} else if (layout === 'carousel') {config.loop = falseconfig.slidesPerView = 1config.breakpoints = {768: { slidesPerView: columns === 2 ? 2 : 2 },1024: { slidesPerView: columns },}config.navigation = {prevEl: `.swiper-button-prev-${swiperId}`,nextEl: `.swiper-button-next-${swiperId}`,}}swiperInstanceRef.current = new Swiper(swiperContainer, config)// Force enable keyboard after initializationif (swiperInstanceRef.current?.keyboard) {swiperInstanceRef.current.keyboard.enable()}// Mark as initializedinitializedRef.current = truereturn () => {swiperInstanceRef.current?.destroy()initializedRef.current = false}}, [swiperId, autoHeight, columns, layout])return null}export default SwiperSliderInit