@use  '../../assets/styles/index.scss' as *;

@mixin icon-sizes($size, $font-size, $line-height) {
    :global(.uui-checkbox) {
        box-sizing: border-box;
        width: $size;
        height: $size;

        :global(.uui-icon) {
            svg {
                width: $size;
            }
        }
    }

    :global(.uui-input-label) {
        font-size: $font-size;
        line-height: $line-height;
    }
}

.root {
    --uui-checkbox-border: var(--uui-control-border);
    --uui-checkbox-border-hover: var(--uui-color-60);
    --uui-checkbox-border-disabled: var(--uui-control-border-disabled);
    --uui-checkbox-border-checked: var(--uui-color-50);
    --uui-checkbox-border-checked-disabled: var(--uui-color-20);
    --uui-checkbox-bg: var(--uui-control-bg);
    --uui-checkbox-bg-checked: var(--uui-color-50);
    --uui-checkbox-bg-disabled: var(--uui-control-bg-disabled);
    --uui-checkbox-bg-checked-hover: var(--uui-color-60);
    --uui-checkbox-bg-checked-disabled: var(--uui-color-20);
    --uui-checkbox-error: var(--uui-error-50);
    --uui-checkbox-fill: var(--uui-control-checkbox-icon);
    --uui-checkbox-label: var(--uui-control-label);
    --uui-checkbox-label-disabled: var(--uui-control-label-disabled);
    --uui-checkbox-border-radius: var(--uui-border-radius);

    --uui-checkbox-font: var(--font-regular);
    //Colors
    &:hover, &:active, &:focus-within {
        :global(.uui-checkbox) {
            border-color: var(--uui-checkbox-border-hover);
        }

        :global(.uui-checked) {
            background-color: var(--uui-checkbox-bg-checked-hover);
        }
    }

    :global(.uui-checkbox) {
        background-color: var(--uui-checkbox-bg);
        border: 1px solid var(--uui-checkbox-border);
        border-radius: var(--uui-checkbox-border-radius);
        position: relative;

        :global(input[type='checkbox']):focus-visible {
            @include focus-visible-effect();
            position: absolute;
            width: inherit;
            height: inherit;
        }
    }

    :global(.uui-input-label) {
        font-family: var(--uui-checkbox-font);
        font-weight: var(--uui-checkbox-font-weigth, normal);
        color: var(--uui-checkbox-label);
        margin-left: 12px;
        flex-grow: 1;
    }

    :global(.uui-checked) {
        background-color: var(--uui-checkbox-bg-checked);
        border-color: var(--uui-checkbox-border-checked);
        fill: var(--uui-checkbox-fill);
    }

    &:global(.uui-disabled),
    &:global(.uui-readonly) {
        cursor: default;

        :global(.uui-checkbox) {
            cursor: default;
            background-color: var(--uui-checkbox-bg-disabled);
            border-color: var(--uui-checkbox-border-disabled);
        }

        &:hover, &:global(.uui-checked), &:focus-within {
            &:global(.uui-checkbox) {
                border-color: var(--uui-checkbox-border-checked-disabled);
            }

            &:global(.uui-icon) {
                background-color: var(--uui-checkbox-bg-checked-disabled);
                border-color: var(--uui-checkbox-border-checked-disabled);
            }
        }

        :global(.uui-input-label) {
            color: var(--uui-checkbox-label-disabled);
        }

        :global(.uui-checked) {
            background-color: var(--uui-checkbox-bg-checked-disabled);
            border-color: var(--uui-checkbox-border-checked-disabled);
        }
    }

    &:global(.uui-invalid) {
        :global(.uui-checkbox) {
            border-color: var(--uui-checkbox-error);
            fill: var(--uui-checkbox-error);

            &:hover, &:active, &:focus-within {
                border-color: var(--uui-checkbox-error);
                fill: var(--uui-checkbox-error);
            }

            &:global(.uui-checked) {
                fill: var(--uui-checkbox-fill);
                background-color: var(--uui-checkbox-error);
                border-color: var(--uui-checkbox-error);

                &:hover, &:active, &:focus-within {
                    background-color: var(--uui-checkbox-error);
                    border-color: var(--uui-checkbox-error);
                }
            }
        }

        :global(.uui-input-label) {
            color: var(--uui-checkbox-error);
        }
    }

    //Sizes
    &.size-18 {
        @include icon-sizes(18px, 14px, 18px);
    }

    &.size-12 {
        @include icon-sizes(12px, 12px, 12px);

        :global(.uui-input-label) {
            margin-left: 6px;
        }
    }

    &.mode-cell {
        justify-content: center;
    }
}
