@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-radio) {
        $this: bem--selector-to-string(&);
        @include register-component(
            $name: string.slice($this, 2, -1),
            $deps: ()
        );

        @extend %radio-display !optional;

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

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

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

        &:active {
            @include e(composite) {
                @extend %igx-radio-hover__composite !optional;
            }

            @include e(ripple) {
                @extend %radio-ripple--hover !optional;
                @extend %radio-ripple--pressed !optional;
            }
        }

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

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

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

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

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

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

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

            &:hover {
                @extend %igx-checkbox--focused-hovered !optional;

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

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

            &:hover {
                @include e(composite) {
                    @extend %igx-radio--checked-active__composite !optional;
                }

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

            &:active {
                @include e(composite) {
                    @extend %igx-radio--checked-active__composite !optional;
                }

                @include e(ripple) {
                    @extend %radio-ripple--hover !optional;
                    @extend %radio-ripple--hover-checked !optional;
                    @extend %radio-ripple--pressed !optional;
                }
            }
        }

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

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

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

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

        @include m(invalid) {
            @extend %radio-display--invalid !optional;

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

            @include e(label) {
                @extend %radio-label--invalid !optional;
            }

            &:hover {
                @include e(label) {
                    @extend %radio-label--invalid--hover !optional;
                }

                @include e(ripple) {
                    @extend %radio-ripple--hover !optional;
                    @extend %radio-ripple--hover-invalid !optional;
                }

                @include e(composite) {
                    @extend %igx-radio-hover__composite--invalid !optional;
                }
            }

            &:active {
                @include e(composite) {
                    @extend %igx-radio-hover__composite--invalid !optional;
                }

                @include e(ripple) {
                    @extend %radio-ripple--hover !optional;
                    @extend %radio-ripple--hover-invalid !optional;
                    @extend %radio-ripple--pressed !optional;
                }
            }
        }

        @include mx(focused, invalid) {
            @extend %igx-radio--focused--invalid !optional;

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

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

            &:hover {
                @include e(composite) {
                    @extend %igx-radio--checked-active__composite !optional;
                }
            }

            &:active {
                @include e(composite) {
                    @extend %igx-radio--checked-active__composite !optional;
                }
            }

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

        @include mx(checked, disabled) {
            @include e(composite) {
                @extend %radio-composite--x--disabled !optional;
            }
        }

        @include mx(checked, invalid) {
            @include e(composite) {
                @extend %radio-composite--x--invalid !optional;
            }

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

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

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

    @include b(igx-radio-group) {
        @extend %radio-group-display !optional;

        @include m(vertical) {
            @extend %radio-group-display--vertical !optional;
        }

        @include m(before) {
            @extend %radio-group-display--before !optional;
        }

        @include m(disabled) {
            @extend %radio-group-display--disabled !optional;
        }
    }
}
