@use '../../base' as *;
@use 'sass:string';

/// @access private
/// @author <a href="https://github.com/simeonoff" target="_blank">Simeon Simeonoff</a>
@mixin component {
    @include b(igx-switch) {
        $this: bem--selector-to-string(&);
        @include register-component(
            $name: string.slice($this, 2, -1),
            $deps: ()
        );

        @extend %switch-display !optional;

        &:hover {
            @include e(ripple) {
                @extend %switch-ripple--hover !optional;
                @extend %switch-ripple--hover-unchecked !optional;
            }

            @include e(composite) {
                @extend %switch-composite--hover !optional;
            }

            @include e(label) {
                @extend %switch-label--hover !optional;
            }

            @include e(label, $m: before) {
                @extend %switch-label--hover !optional;
            }
        }

        &:active {
            @include e(ripple) {
                @extend %switch-ripple--hover !optional;
                @extend %switch-ripple--hover-unchecked !optional;
                @extend %switch-ripple--pressed !optional;
            }
        }

        @include e(input) {
            @extend %switch-input !optional;
        }

        @include e(composite) {
            @extend %switch-composite !optional;
        }

        @include e(composite-thumb) {
            @extend %switch-composite-thumb !optional;
        }

        @include e(thumb) {
            @extend %switch-thumb !optional;
        }

        @include e(ripple) {
            @extend %switch-ripple !optional;
        }

        @include e(label) {
            @extend %switch-label !optional;
            @extend %switch-label--after !optional;
        }

        @include e(label, $m: before) {
            @extend %switch-label !optional;
            @extend %switch-label--before !optional;
        }

        @include m(focused) {
            @extend  %igx-switch--focused !optional;

            @include e(ripple) {
                @extend %switch-ripple--focused !optional;
            }

            &:hover {
                @include e(composite) {
                    @extend %igx-switch--focused--hover !optional;
                }
            }
        }

        @include mx(focused, checked) {
            @extend  %igx-switch--focused-checked !optional;

            &:hover {
                @include e(composite) {
                    @extend %switch-composite--hover !optional;
                    @extend %switch-composite--x--hover !optional;
                }
            }
        }

        @include mx(disabled, checked) {
            @extend %igx-switch--disabled-checked !optional;
        }

        @include m(checked) {
            @include e(composite) {
                @extend %switch-composite--x !optional;
            }

            @include e(composite-thumb) {
                @extend %switch-composite-thumb--x !optional;
            }

            @include e(thumb) {
                @extend %switch-thumb--x !optional;
            }

            &:hover {
                @include e(ripple) {
                    @extend %switch-ripple--hover !optional;
                    @extend %switch-ripple--hover-checked !optional;
                }

                @include e(composite) {
                    @extend %switch-composite--x--hover !optional;
                }
            }

            &:active {
                @include e(ripple) {
                    @extend %switch-ripple--hover !optional;
                    @extend %switch-ripple--hover-checked !optional;
                    @extend %switch-ripple--pressed !optional;
                }
            }
        }

        @include m(disabled) {
            @extend %switch-display--disabled !optional;

            @include e(composite) {
                @extend %switch-composite--disabled !optional;
            }

            @include e(thumb) {
                @extend %switch-thumb--disabled !optional;
            }

            @include e(label) {
                @extend %switch-label--disabled !optional;
            }

            @include e(label, $m: before) {
                @extend %switch-label--disabled !optional;
            }
        }

        @include mx(focused, checked) {
            @include e(ripple) {
                @extend %switch-ripple--focused !optional;
                @extend %switch-ripple--focused-checked !optional;
            }
        }
    }
}
