@use 'sass:map';
@use '@mezzanine-ui/system/palette' as palette;
@use '@mezzanine-ui/system/spacing' as spacing;
@use '@mezzanine-ui/system/typography' as typography;
@use '@mezzanine-ui/system/effect' as effect;
@use '@mezzanine-ui/system/radius' as radius;
@use '@mezzanine-ui/system/z-index' as z-index;
@use './message' as *;

@mixin _get-icon-color($severity) {
  @if $severity == 'info' {
    color: palette.semantic-variable(icon, info);
  }

  @if $severity == 'error' {
    color: palette.semantic-variable(icon, error);
  }

  @if $severity == 'success' {
    color: palette.semantic-variable(icon, success);
  }

  @if $severity == 'warning' {
    color: palette.semantic-variable(icon, warning);
  }

  @if $severity == 'loading' {
    color: palette.semantic-variable(icon, brand);
  }
}

.#{$prefix} {
  flex-shrink: 0;
  display: flex;
  flex-flow: row;
  align-items: center;
  gap: spacing.semantic-variable(gap, tight-fixed);
  padding: spacing.semantic-variable(padding, vertical, comfort) spacing.semantic-variable(padding, horizontal, spacious);
  max-width: spacing.semantic-variable(size, container, standard);
  background-color: palette.semantic-variable("background", base);
  border: 1px solid palette.semantic-variable(border, neutral-faint);
  border-radius: radius.variable(base);
  box-shadow: effect.variable(shadow, floating);
  box-sizing: border-box;
  pointer-events: auto;

  &__icon {
    font-size: spacing.semantic-variable(size, element, gentle);
  }

  &__content {
    white-space: pre-line;
    color: palette.semantic-variable(text, neutral-solid);
    @include typography.semantic-variable(body);
  }

  @each $severity in $severities {
    &--#{$severity} {
      .#{$prefix}__icon {
        @include _get-icon-color($severity);
      }
    }
  }

  &__root {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: spacing.semantic-variable(gap, tight);
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    padding-bottom: calc(spacing.semantic-variable(gap, spacious) + spacing.semantic-variable(padding, vertical, base) + spacing.semantic-variable(padding, vertical, base) + spacing.semantic-variable(padding, vertical, calm) + spacing.semantic-variable(padding, vertical, calm) + typography.primitive-line-height-variable(functional));
    z-index: z-index.get(feedback);
    overflow: hidden;
    pointer-events: none;
  }
}
