<template>
    <div>
        <Head>
            <Title>Vue Carousel Component</Title>
            <Meta name="description" content="Carousel is a content slider featuring various customization options." />
        </Head>

        <div class="content-section introduction">
            <div class="feature-intro">
                <h1>Carousel</h1>
                <p>Carousel is a content slider featuring various customization options.</p>
            </div>
            <AppDemoActions />
        </div>

        <div class="content-section implementation">
            <div class="card">
                <Carousel :value="products" :numVisible="3" :numScroll="3" :responsiveOptions="responsiveOptions">
                    <template #header>
                        <h5>Basic</h5>
                    </template>
                    <template #item="slotProps">
                        <div class="product-item">
                            <div class="product-item-content">
                                <div class="mb-3">
                                    <img :src="$config.public.contextPath + 'demo/images/product/' + slotProps.data.image" :alt="slotProps.data.name" class="product-image" />
                                </div>
                                <div>
                                    <h4 class="mb-1">{{ slotProps.data.name }}</h4>
                                    <h6 class="mt-0 mb-3">${{ slotProps.data.price }}</h6>
                                    <span :class="'product-badge status-' + slotProps.data.inventoryStatus.toLowerCase()">{{ slotProps.data.inventoryStatus }}</span>
                                    <div class="car-buttons mt-5">
                                        <Button icon="pi pi-search" class="p-button p-button-rounded mr-2" />
                                        <Button icon="pi pi-star-fill" class="p-button-success p-button-rounded mr-2" />
                                        <Button icon="pi pi-cog" class="p-button-help p-button-rounded" />
                                    </div>
                                </div>
                            </div>
                        </div>
                    </template>
                </Carousel>
            </div>

            <div class="card">
                <Carousel :value="products" :numVisible="3" :numScroll="1" :responsiveOptions="responsiveOptions" class="custom-carousel" :circular="true" :autoplayInterval="3000">
                    <template #header>
                        <h5>Circular, AutoPlay, 3 Items per Page and Scroll by 1</h5>
                    </template>
                    <template #item="slotProps">
                        <div class="product-item">
                            <div class="product-item-content">
                                <div class="mb-3">
                                    <img :src="$config.public.contextPath + 'demo/images/product/' + slotProps.data.image" :alt="slotProps.data.name" class="product-image" />
                                </div>
                                <div>
                                    <h4 class="mb-1">{{ slotProps.data.name }}</h4>
                                    <h6 class="mt-0 mb-3">${{ slotProps.data.price }}</h6>
                                    <span :class="'product-badge status-' + slotProps.data.inventoryStatus.toLowerCase()">{{ slotProps.data.inventoryStatus }}</span>
                                    <div class="car-buttons mt-5">
                                        <Button icon="pi pi-search" class="p-button p-button-rounded mr-2" />
                                        <Button icon="pi pi-star-fill" class="p-button-success p-button-rounded mr-2" />
                                        <Button icon="pi pi-cog" class="p-button-help p-button-rounded" />
                                    </div>
                                </div>
                            </div>
                        </div>
                    </template>
                </Carousel>
            </div>

            <div class="card">
                <Carousel :value="products" :numVisible="1" :numScroll="1" orientation="vertical" verticalViewPortHeight="352px" style="max-width: 400px; margin-top: 2em">
                    <template #header>
                        <h5>Vertical</h5>
                    </template>
                    <template #item="slotProps">
                        <div class="product-item">
                            <div class="product-item-content">
                                <div class="mb-3">
                                    <img :src="$config.public.contextPath + 'demo/images/product/' + slotProps.data.image" :alt="slotProps.data.name" class="product-image" />
                                </div>
                                <div>
                                    <h4 class="mb-1">{{ slotProps.data.name }}</h4>
                                    <h6 class="mt-0 mb-3">${{ slotProps.data.price }}</h6>
                                    <span :class="'product-badge status-' + slotProps.data.inventoryStatus.toLowerCase()">{{ slotProps.data.inventoryStatus }}</span>
                                    <div class="car-buttons mt-5">
                                        <Button icon="pi pi-search" class="p-button p-button-rounded mr-2" />
                                        <Button icon="pi pi-star-fill" class="p-button-success p-button-rounded mr-2" />
                                        <Button icon="pi pi-cog" class="p-button-help p-button-rounded" />
                                    </div>
                                </div>
                            </div>
                        </div>
                    </template>
                </Carousel>
            </div>
        </div>

        <CarouselDoc />
    </div>
</template>

<script>
import ProductService from '../../service/ProductService';
import CarouselDoc from './CarouselDoc';

export default {
    data() {
        return {
            products: null,
            responsiveOptions: [
                {
                    breakpoint: '1024px',
                    numVisible: 3,
                    numScroll: 3
                },
                {
                    breakpoint: '600px',
                    numVisible: 2,
                    numScroll: 2
                },
                {
                    breakpoint: '480px',
                    numVisible: 1,
                    numScroll: 1
                }
            ]
        };
    },
    productService: null,
    created() {
        this.productService = new ProductService();
    },
    mounted() {
        this.productService.getProductsSmall().then((data) => (this.products = data.slice(0, 9)));
    },
    components: {
        CarouselDoc: CarouselDoc
    }
};
</script>

<style lang="scss" scoped>
.product-item {
    .product-item-content {
        border: 1px solid var(--surface-border);
        border-radius: 3px;
        margin: 0.3rem;
        text-align: center;
        padding: 2rem 0;
    }

    .product-image {
        width: 50%;
        box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
    }
}
</style>
