@use '../../../../../styles/base/mixin' as mixins;
@use '../../../../../styles/base/variables' as vars;

$pagination: (
    container: (
        gap: 2rem,
        margin: 0.5rem 0,
        color: var(--clr-black-60),
        font-size: 0.875rem,
        font-weight: 400,
        line-height: 1rem,
    ),
    container-mobile: (
        gap: 1rem,
    ),
    paging: (
        gap: 0.5rem,
    ),
    paging-mobile: (
        margin: 0.5rem 0 0 0,
    ),
    paging-item: (
        padding: 0.5rem,
        border: 1px solid var(--clr-gray-15),
        border-radius: 0.75rem,
    ),
    paging-item-hover: (
        color: var(--clr-white-100),
        background-color: var(--clr-black-60),
    ),
    paging-item-active: (
        color: var(--clr-white-100),
        background-color: var(--clr-black-60),
    ),
    paging-item-disabled-svg: (
        opacity: 0.3,
    ),
    size-toggle: (
        gap: 0.75rem,
    ),
    size-toggle-selector: (
        min-width: 3rem,
        height: 2rem,
    ),
    size-toggle-selector-mobile: (
        margin: 0 0 0.5rem 0,
    ),
);

:host {
    width: fit-content;
    height: 100%;
    display: flex;

    @each $element, $elements in $pagination {
        @each $style-token, $value in $elements {
            #{mixins.generateCssVar('table-pagination', #{$element}, #{$style-token})}: #{$value};
        }
    }

    .pagination-container {
        position: relative;

        display: flex;
        justify-content: flex-start;
        align-items: center;
        gap: var(--rt-table-pagination-container-gap);

        color: var(--rt-table-pagination-container-color);
        font-size: var(--rt-table-pagination-container-font-size);
        font-weight: var(--rt-table-pagination-container-font-weight);
        line-height: var(--rt-table-pagination-container-line-height);

        &--clipped {
            flex-direction: column;
            justify-content: center;
            align-items: flex-start;
            gap: var(--rt-table-pagination-container-mobile-gap);
        }

        &--mobile {
            width: 100%;
            justify-content: space-between;
        }

        .paging {
            display: flex;
            justify-content: center;
            align-items: center;
            gap: var(--rt-table-pagination-paging-gap);
            margin: var(--rt-table-pagination-container-margin);

            &--clipped {
                margin: var(--rt-table-pagination-paging-mobile-margin);
            }

            &__item {
                display: flex;
                justify-content: center;
                align-items: center;

                position: relative;

                padding: var(--rt-table-pagination-paging-item-padding);
                border: var(--rt-table-pagination-paging-item-border);
                border-radius: var(--rt-table-pagination-paging-item-border-radius);

                background-color: transparent;
                cursor: default;
                pointer-events: none;

                &-label {
                    min-width: 1rem;
                    text-align: center;
                }

                svg {
                    fill-opacity: var(--rt-table-pagination-paging-item-disabled-svg-opacity);
                }

                &:hover:not(.divider) {
                    color: var(--rt-table-pagination-paging-item-hover-color);
                    background-color: var(--rt-table-pagination-paging-item-hover-background-color);
                }

                &--active {
                    color: var(--rt-table-pagination-paging-item-active-color);
                    background-color: var(--rt-table-pagination-paging-item-active-background-color);
                }

                &--enabled {
                    cursor: pointer;
                    pointer-events: auto;

                    svg {
                        fill-opacity: 1;
                    }
                }

                &--divider {
                    cursor: default;
                    pointer-events: none;
                    border: none;
                }
            }
        }

        .page-size-toggle {
            display: flex;
            flex-direction: row;
            justify-content: center;
            align-items: center;
            gap: var(--rt-table-pagination-size-toggle-gap);
            margin: var(--rt-table-pagination-container-margin);

            &--clipped {
                margin: var(--rt-table-pagination-size-toggle-selector-mobile-margin);
            }

            &__title {
                white-space: nowrap;
            }

            &__selector {
                width: auto;
                min-width: var(--rt-table-pagination-size-toggle-selector-min-width);
                height: var(--rt-table-pagination-size-toggle-selector-height);

                border: var(--rt-table-pagination-paging-item-border);
                border-radius: var(--rt-table-pagination-paging-item-border-radius);

                background-color: transparent;
                cursor: pointer;

                color: var(--rt-table-pagination-container-color);
                font-size: var(--rt-table-pagination-container-font-size);
                font-weight: var(--rt-table-pagination-container-font-weight);
                line-height: var(--rt-table-pagination-container-line-height);
            }
        }
    }

    @include mixins.media-breakpoint-down(vars.$device-xs) {
        width: 100%;

        .pagination-container {
            width: 100%;
            justify-content: space-between;
        }
    }
}
