@use 'sass:map';
@use '../functions/colors' as colors;
@use '../settings/index' as settings;
@use '../settings/defaults' as defs;
@use '../variables' as vars;

// Definitions
$useGlass: if(vars.$useGlass != null, vars.$useGlass, settings.$useGlass);
$useColorsLightMode: if(vars.$useColorsLightMode != null, vars.$useColorsLightMode, settings.$useColorsLightMode);
$useColorsDarkMode: if(vars.$useColorsDarkMode != null, vars.$useColorsDarkMode, settings.$useColorsDarkMode);
$glassBlur: if(vars.$glassBlur != null, vars.$glassBlur, defs.$glassBlur);
$glassColor: if(vars.$glassColor != null, vars.$glassColor, defs.$glassColor);
$glassBorderThickness: if(vars.$glassBorderThickness != null, vars.$glassBorderThickness, defs.$glassBorderThickness);
$glassBorder1Color: if(vars.$glassBorder1Color != null, vars.$glassBorder1Color, defs.$glassBorder1Color);
$glassBorder2Color: if(vars.$glassBorder2Color != null, vars.$glassBorder2Color, defs.$glassBorder2Color);
$glassLightAngle: if(vars.$glassLightAngle != null, vars.$glassLightAngle, defs.$glassLightAngle);

@if $useGlass {
  $glassColorLight: colors.hexToRgba(map.get($glassColor, 'light'), 0.15, 'Glass.light');
  $glassColorDark: colors.hexToRgba(map.get($glassColor, 'dark'), 0.15, 'Glass.dark');
  $glassBorder1ColorLight: colors.hexToRgba(map.get($glassBorder1Color, 'light'), 0.4, 'Glass.light');
  $glassBorder1ColorDark: colors.hexToRgba(map.get($glassBorder1Color, 'dark'), 0.4, 'Glass.dark');
  $glassBorder2ColorLight: colors.hexToRgba(map.get($glassBorder2Color, 'light'), 0.4, 'Glass.light');
  $glassBorder2ColorDark: colors.hexToRgba(map.get($glassBorder2Color, 'dark'), 0.4, 'Glass.dark');

  .bg\:glass {
    position: relative;
    isolation: isolate;
    backdrop-filter: blur(var(--glass-blur, $glassBlur));

    &::before {
      content: '';
      position: absolute;
      inset: 0;
      border-radius: inherit;
      border: var(--glass-border-thickness, $glassBorderThickness) solid transparent;
      mask:
        linear-gradient(black, black) border-box,
        linear-gradient(black, black) padding-box;
      mask-composite: subtract;
      z-index: -1;
    }

    @if ($useColorsLightMode) {
      .light &,
      .light\:#{&},
      &.light {
        background: var(--glass-color-light, $glassColorLight);

        &::before {
          background: linear-gradient(
              var(--glass-light-angle, $glassLightAngle),
              var(--glass-border-2-color-light, $glassBorder2ColorLight),
              var(--glass-border-1-color-light, $glassBorder1ColorLight),
              var(--glass-border-2-color-light, $glassBorder2ColorLight)
            )
            border-box;
        }
      }
    }

    @if ($useColorsDarkMode) {
      .dark &,
      .dark\:#{&},
      &.dark {
        background: var(--glass-color-dark, $glassColorDark);

        &::before {
          background: linear-gradient(
              var(--glass-light-angle, $glassLightAngle),
              var(--glass-border-2-color-dark, $glassBorder2ColorDark),
              var(--glass-border-1-color-dark, $glassBorder1ColorDark),
              var(--glass-border-2-color-dark, $glassBorder2ColorDark)
            )
            border-box;
        }
      }
    }
  }
}
