/**
 * @license
 * Copyright 2020 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

@use 'sass:map';
@use 'sass:selector';
@use '@material/radio/radio-theme';
@use '@material/ripple/ripple-theme' as mdc-ripple-theme;
@use '@material/theme/keys';
@use '@material/theme/shadow-dom';

@mixin theme($theme) {
  @include radio-theme.theme($theme);

  @if shadow-dom.$css-selector-fallback-declarations {
    @include theme-styles($theme);
  }
}

@mixin theme-styles($theme) {
  .mdc-radio {
    @include radio-theme.theme-styles($theme);
  }

  $theme: keys.create-theme-properties(
    $theme,
    $prefix: radio-theme.$custom-property-prefix
  );

  @include mdc-ripple-theme.theme(
    (
      hover-state-layer-color:
        map.get($theme, unselected-hover-state-layer-color),
      focus-state-layer-color:
        map.get($theme, unselected-focus-state-layer-color),
      pressed-state-layer-color:
        map.get($theme, unselected-pressed-state-layer-color),
      hover-state-layer-opacity:
        map.get($theme, unselected-hover-state-layer-opacity),
      focus-state-layer-opacity:
        map.get($theme, unselected-focus-state-layer-opacity),
      pressed-state-layer-opacity:
        map.get($theme, unselected-pressed-state-layer-opacity),
    )
  );

  @include _checked-selector() {
    @include mdc-ripple-theme.theme(
      (
        hover-state-layer-color:
          map.get($theme, selected-hover-state-layer-color),
        focus-state-layer-color:
          map.get($theme, selected-focus-state-layer-color),
        pressed-state-layer-color:
          map.get($theme, selected-pressed-state-layer-color),
        hover-state-layer-opacity:
          map.get($theme, selected-hover-state-layer-opacity),
        focus-state-layer-opacity:
          map.get($theme, selected-focus-state-layer-opacity),
        pressed-state-layer-opacity:
          map.get($theme, selected-pressed-state-layer-opacity),
      )
    );
  }
}

@mixin _checked-selector() {
  @include shadow-dom.host-aware(selector.append(&, '[checked]')) {
    @content;
  }
}
