@use '../../style/internal/z-index';
@use '../functions';

@use '@material/textfield';

// Visual styles that unify the look & feel and behavior of
// components such as input fields, select dropdowns and pickers

$lime-text-field-outline-color: rgba(var(--contrast-700), 0.65);
$lime-text-field-outline-color--hovered: rgba(var(--contrast-700), 1);
$lime-text-field-outline-color--focused: var(
    --lime-primary-color,
    var(--limel-theme-primary-color)
);

$background-color-normal: rgba(var(--contrast-200), 0.5);
$background-color-hovered: rgba(var(--contrast-200), 1);
$background-color-focused: rgba(var(--contrast-100), 0.8);
$background-color-disabled: transparent;

$label-color: rgba(var(--contrast-1200), 1);
$label-color-disabled: rgba(var(--contrast-1200), 0.5);
$input-text-color: rgba(var(--contrast-1400), 1);
$input-text-leading-icon-color: rgb(var(--contrast-900));
$input-placeholder-color: $input-text-leading-icon-color;

$input-text-color-disabled: rgba(var(--contrast-1400), 0.5);
$helper-text-color: $label-color;

$height-of-mdc-text-field: 2.5rem; //This is written directly in `rem`, becurse the variable used to calculate things elsewhere

@mixin looks-disabled() {
    cursor: not-allowed;
    opacity: 0.4;
}

@mixin looks-like-input-value() {
    line-height: functions.pxToRem(28);
    -moz-osx-font-smoothing: grayscale;
    -webkit-font-smoothing: antialiased;

    color: $input-text-color;
    font-size: var(--limel-theme-default-font-size);
    font-weight: 400;
    font-family: inherit;
    letter-spacing: 0.009375em;
}

@mixin input-field-placeholder {
    &::placeholder {
        color: $input-placeholder-color !important;
        font-size: var(--limel-theme-default-font-size) !important;
        font-family: inherit !important;
    }
}

@mixin leading-icon {
    .mdc-text-field__icon {
        display: flex;
        align-items: center;
        justify-content: center;
        color: $input-text-leading-icon-color;

        limel-icon {
            width: functions.pxToRem(24);
            height: functions.pxToRem(24);
        }
    }
}

@mixin trailing-icon {
    .mdc-text-field--with-trailing-icon {
        .mdc-text-field__icon--trailing {
            transition:
                background-color 0.2s ease,
                box-shadow 0.3s ease;
            border-radius: 50%;
            padding: functions.pxToRem(8);

            &:focus {
                outline: none;
            }

            &:focus-visible {
                box-shadow: 0 0 0 functions.pxToRem(2)
                    var(--lime-primary-color, var(--limel-theme-primary-color)) !important; // has to be `!important` since we're using `box-shadow` insted of `outline` which is also used in `hover` mode
            }
        }
        &:not(.mdc-text-field--disabled):hover {
            .mdc-text-field__icon--trailing {
                box-shadow: var(--button-shadow-normal);
                background-color: rgba(var(--contrast-100), 0.4);

                &:hover {
                    background-color: rgb(var(--contrast-100));
                    box-shadow: var(--button-shadow-hovered);
                }

                &:active {
                    box-shadow: var(--button-shadow-pressed);
                }
            }
        }

        &.mdc-text-field--invalid {
            i.mdc-text-field__icon.invalid-icon {
                limel-icon {
                    color: var(--limel-theme-error-text-color);
                }
            }
        }
    }
}

@mixin readonly-overrides {
    .mdc-text-field.mdc-text-field--disabled.lime-text-field--readonly {
        .mdc-text-field__input {
            background-color: transparent;
            color: $input-text-color;
        }

        &.mdc-text-field--with-leading-icon,
        &.has-leading-icon {
            .lime-looks-like-input-value {
                padding-left: 1rem;
            }
        }

        .lime-looks-like-input-value {
            color: $input-text-color;
            opacity: 1;
        }

        .mdc-floating-label {
            color: $label-color;
        }

        .mdc-notched-outline__leading,
        .mdc-notched-outline__notch,
        .mdc-notched-outline__trailing {
            border-color: transparent;
        }

        &.mdc-text-field--invalid {
            & + .mdc-text-field-helper-line {
                .mdc-text-field-helper-text--validation-msg {
                    color: var(--limel-theme-error-text-color);
                }
            }
        }

        &.mdc-text-field--with-trailing-icon {
            input.mdc-text-field__input {
                pointer-events: none; // otherwise trailing icon links cannot be clicked
            }

            .mdc-text-field__icon--trailing {
                width: calc(100% - 1rem);
                position: absolute;
                left: 0;

                display: flex;
                justify-content: flex-end;
                align-items: center;

                pointer-events: auto;
                color: $label-color;
                border-radius: 0.25rem;

                limel-icon {
                    width: 1.5rem;
                    margin-right: 0.25rem;
                }
            }

            &:hover .mdc-text-field__icon--trailing {
                &:hover {
                    box-shadow: var(--button-shadow-hovered);
                }

                &:active {
                    box-shadow: var(--button-shadow-pressed);
                }
            }
        }
    }
}

@mixin lime-empty-value-for-readonly {
    .lime-empty-value-for-readonly {
        z-index: z-index.$input-field--formatted-value;
        position: absolute;
        top: 0.875rem; // 14px
        left: 1rem;
    }
}

@mixin lime-looks-like-input-value {
    .lime-looks-like-input-value {
        @include looks-like-input-value;

        .mdc-text-field--disabled & {
            @include looks-disabled;
        }
    }
}
