@use 'sass:map';

@mixin _kbq-icon-button-color($map) {
    color: map.get($map, default);

    &:hover,
    &.kbq-hovered {
        color: map.get($map, hover);
    }

    &:active,
    &.kbq-active {
        color: map.get($map, active);
    }

    &.kbq-disabled {
        color: map.get($map, disabled);
    }
}

@mixin kbq-icon-button-theme() {
    .kbq-icon-button {
        &:focus {
            outline: none;
        }

        &.kbq-theme {
            @include _kbq-icon-button-color(
                (
                    default: var(--kbq-icon-button-theme-default),
                    hover: var(--kbq-icon-button-theme-states-hover),
                    active: var(--kbq-icon-button-theme-states-active),
                    disabled: var(--kbq-icon-button-theme-states-disabled)
                )
            );
        }

        &.kbq-contrast {
            @include _kbq-icon-button-color(
                (
                    default: var(--kbq-icon-button-contrast-default),
                    hover: var(--kbq-icon-button-contrast-states-hover),
                    active: var(--kbq-icon-button-contrast-states-active),
                    disabled: var(--kbq-icon-button-contrast-states-disabled)
                )
            );
        }

        &.kbq-contrast-fade {
            @include _kbq-icon-button-color(
                (
                    default: var(--kbq-icon-button-fade-contrast-default),
                    hover: var(--kbq-icon-button-fade-contrast-states-hover),
                    active: var(--kbq-icon-button-fade-contrast-states-active),
                    disabled: var(--kbq-icon-button-fade-contrast-states-disabled)
                )
            );
        }

        &.kbq-error {
            @include _kbq-icon-button-color(
                (
                    default: var(--kbq-icon-button-error-default),
                    hover: var(--kbq-icon-button-error-states-hover),
                    active: var(--kbq-icon-button-error-states-active),
                    disabled: var(--kbq-icon-button-error-states-disabled)
                )
            );
        }

        &.kbq-success {
            @include _kbq-icon-button-color(
                (
                    default: var(--kbq-icon-button-success-default),
                    hover: var(--kbq-icon-button-success-states-hover),
                    active: var(--kbq-icon-button-success-states-active),
                    disabled: var(--kbq-icon-button-success-states-disabled)
                )
            );
        }

        &.kbq-warning {
            @include _kbq-icon-button-color(
                (
                    default: var(--kbq-icon-button-warning-default),
                    hover: var(--kbq-icon-button-warning-states-hover),
                    active: var(--kbq-icon-button-warning-states-active),
                    disabled: var(--kbq-icon-button-warning-states-disabled)
                )
            );
        }

        &.cdk-keyboard-focused {
            box-shadow:
                inset 0 0 0 1px var(--kbq-states-line-focus-theme),
                0 0 0 1px var(--kbq-states-line-focus-theme);

            &.kbq-error {
                box-shadow:
                    inset 0 0 0 1px var(--kbq-states-line-focus-error),
                    0 0 0 1px var(--kbq-states-line-focus-error);
            }
        }
    }
}
