'use client'
import React, { useState, useEffect } from 'react';
import Link from "next/link";
import { Autoplay, Navigation, Pagination } from "swiper/modules";
import { Swiper, SwiperSlide } from "swiper/react";
import { motion, AnimatePresence } from "framer-motion";

import "swiper/css";
import "swiper/css/navigation";
import "swiper/css/pagination";

const swiperOptions = {
    modules: [Autoplay, Pagination, Navigation],
    slidesPerView: 1,
    spaceBetween: 0,
    autoplay: {
        delay: 5000,
        disableOnInteraction: false,
    },
    loop: true,
    navigation: {
        nextEl: '.h1n',
        prevEl: '.h1p',
    },
    pagination: {
        el: '.swiper-pagination',
        clickable: true,
    },
};

const variants = {
    topToBottom: {
        initial: { y: '-100vh', opacity: 0 },
        animate: { y: 0, opacity: 1 },
        exit: { y: '100vh', opacity: 0 }
    },
    bottomToTop: {
        initial: { y: '100vh', opacity: 0 },
        animate: { y: 0, opacity: 1 },
        exit: { y: '-100vh', opacity: 0 }
    },
    leftToRight: {
        initial: { x: '-100vw', opacity: 0 },
        animate: { x: 0, opacity: 1 },
        exit: { x: '100vw', opacity: 0 }
    },
    rightToLeft: {
        initial: { x: '100vw', opacity: 0 },
        animate: { x: 0, opacity: 1 },
        exit: { x: '-100vw', opacity: 0 }
    },
};

const transition = {
    type: "tween",
    ease: [0.4, 0.0, 0.2, 1],
    duration: 1.2
};

export default function Banner() {
    const [activeIndex, setActiveIndex] = useState(0);
    const [isAnimating, setIsAnimating] = useState(false);

    const slides = [
        {
            id: 0,
            variant: 'topToBottom',
            bgImage: '/assets/images/home/banner/home-banner-1.webp',
            upperText: 'The Journey to Better Health Begins here',
            title: 'Your Path to',
            titleSpan: 'Recovery',
            titleEnd: 'Starts Today',
            subtitle: 'Expert Physiotherapy in Mississauga for You.',
            description: 'Our skilled team provides physiotherapy in Mississauga to help you regain mobility and live pain-free. Compassionate care designed around your needs.',
            buttonText: 'Book Your Appointment',
            buttonLink: 'tel:+647-722-3434',
            contentStyle: 'mobile-style'
        },
        {
            id: 1,
            variant: 'bottomToTop',
            bgImage: '/assets/images/home/banner/home-banner-2.webp',
            upperText: 'Compassionate Care, Delivered with Expertise',
            title: 'Healing Touch,',
            titleSpan: 'Fresh',
            titleEnd: 'Inner Strength',
            subtitle: 'Expert Hand Massage Techniques for Relief',
            description: 'Experience targeted hand massage therapy to ease tension and promote healing, delivered by experienced therapists focused on your comfort and well-being.',
            buttonText: 'Schedule a Massage',
            buttonLink: '/contact',
            contentStyle: 'with-background'
        },
        {
            id: 2,
            variant: 'leftToRight',
            bgImage: '/assets/images/home/banner/home-banner-3.webp',
            upperText: 'Your Path to Complete Wellness Starts Here',
            title: 'Local Physio',
            titleSpan: 'Experts',
            titleEnd: 'Near You',
            subtitle: 'Physiotherapy Etobicoke & Rehab Care.',
            description: 'Offering comprehensive physiotherapy and rehabilitation services in Etobicoke to support your wellness journey and help restore your strength efficiently.',
            buttonText: 'Explore Our Service',
            buttonLink: '/etobicoke-treatment-service',
            contentStyle: 'with-background'
        },
        {
            id: 3,
            variant: 'rightToLeft',
            bgImage: '/assets/images/home/banner/home-banner-4.webp',
            upperText: 'Healing Hands, Caring Hearts in Action',
            title: 'Wellness',
            titleSpan: 'by the',
            titleEnd: 'Waterfront',
            subtitle: 'Waterfront Physio and Rehab Services.',
            description: 'Find peace and true healing with our specialized waterfront physio and rehab programs carefully designed for lasting wellness and a better quality of life.',
            buttonText: 'Visit Our Location',
            buttonLink: '/contact',
            contentStyle: 'with-background'
        }
    ];

    const handleSlideChange = (swiper) => {
        setIsAnimating(true);
        setActiveIndex(swiper.realIndex || 0);
        setTimeout(() => {
            setIsAnimating(false);
        }, 1200);
    };

    return (
        <section className="banner-style-two p_relative">
            <Swiper
                {...swiperOptions}
                className="banner-carousel owl-theme owl-carousel owl-nav-none owl-dots-none"
                onSwiper={(swiper) => {
                    setActiveIndex(swiper.realIndex || 0);
                }}
                onSlideChange={handleSlideChange}
            >
                {slides.map((slide, index) => (
                    <SwiperSlide key={slide.id}>
                        <AnimatePresence mode="wait">
                            {activeIndex === index && (
                                <motion.div
                                    key={`slide-${index}`}
                                    className="slide-item banner-slide"
                                    variants={variants[slide.variant]}
                                    initial="initial"
                                    animate="animate"
                                    exit="exit"
                                    transition={transition}
                                >
                                    <div
                                        className={`bg-layer ${slide.id === 0 ? "bg-slide-0" : ""}`}
                                        style={{
                                            backgroundImage: `url(${slide.bgImage})`,
                                        }}
                                    ></div>
                                    <div className="auto-container">
                                        <div
                                            className={`content-box custom-content-box ${slide.contentStyle || ''}`}
                                            style={slide.contentStyle === 'with-background' ? {
                                                backgroundColor: '#fff',
                                                opacity: 0.8,
                                                borderRadius: '20px',
                                                padding: '30px'
                                            } : {}}
                                        >
                                            <span className="upper-text">
                                                {slide.upperText}
                                            </span>

                                            <h2>
                                                {slide.title} <span>{slide.titleSpan}</span> {slide.titleEnd}
                                            </h2>

                                            <p>
                                                {slide.subtitle}
                                            </p>

                                            <p>
                                                {slide.description}
                                            </p>

                                            <div className="btn-box mt-3">
                                                <Link href={slide.buttonLink} className="theme-btn btn-one">
                                                    <span>{slide.buttonText}</span>
                                                </Link>
                                            </div>
                                        </div>
                                    </div>
                                </motion.div>
                            )}
                        </AnimatePresence>
                    </SwiperSlide>
                ))}
            </Swiper>
        </section>
    );
};
