////
/// (c) hidoo | MIT License
/// @group plugin/spritesheet
////

@use "sass:map";
@use "sass:string";
@use "../../../../lib/function";
@use "../../../../lib/mixin";
@use "../../../../settings";
@use "./set-properties" as _mixin;

/// Define toggle item
/// @access private
/// @param {String} $name name of spritesheet item
/// @param {Map} $items [()] spritesheet items
/// @param {Map} $options [()] options
///
@mixin define-toggle-item($name, $items: (), $options: ()) {
  @if map.has-key($items, $name) {
    &-#{$name} {
      $up: map.get($items, $name);

      @content;

      &::before {
        @include _mixin.set-properties($values: $up, $options: $options);
      }

      @if map.has-key($items, "#{$name}--focus") {
        $focus: map.get($items, "#{$name}--focus");

        @include mixin.has-focus() {
          &::before {
            @include _mixin.set-properties(
              $values: (
                "offset-x": map.get($focus, "offset-x"),
                "offset-y": map.get($focus, "offset-y")
              ),
              $options: map.merge(
                  $options,
                  (
                    "with-property": false
                  )
                )
            );
          }
        }
      }

      @if map.has-key($items, "#{$name}--disabled") {
        $disabled: map.get($items, "#{$name}--disabled");

        @include mixin.has-disabled() {
          --field-opacity: 0;

          &::before {
            @include _mixin.set-properties(
              $values: (
                "offset-x": map.get($disabled, "offset-x"),
                "offset-y": map.get($disabled, "offset-y")
              ),
              $options: map.merge(
                  $options,
                  (
                    "with-property": false
                  )
                )
            );
          }
        }
      }

      @if map.has-key($items, "#{$name}--selected") {
        $selected: map.get($items, "#{$name}--selected");

        @include mixin.has-selected() {
          &::before {
            @include _mixin.set-properties(
              $values: (
                "offset-x": map.get($selected, "offset-x"),
                "offset-y": map.get($selected, "offset-y")
              ),
              $options: map.merge(
                  $options,
                  (
                    "with-property": false
                  )
                )
            );
          }
        }

        @if map.has-key($items, "#{$name}--selected--focus") {
          $selected-focus: map.get($items, "#{$name}--selected--focus");

          @include mixin.has-selected() {
            @include mixin.has-focus() {
              &::before {
                @include _mixin.set-properties(
                  $values: (
                    "offset-x": map.get($selected-focus, "offset-x"),
                    "offset-y": map.get($selected-focus, "offset-y")
                  ),
                  $options: map.merge(
                      $options,
                      (
                        "with-property": false
                      )
                    )
                );
              }
            }
          }
        }

        @if map.has-key($items, "#{$name}--selected--disabled") {
          $selected-disabled: map.get($items, "#{$name}--selected--disabled");

          @include mixin.has-selected() {
            @include mixin.has-disabled() {
              &::before {
                @include _mixin.set-properties(
                  $values: (
                    "offset-x": map.get($selected-disabled, "offset-x"),
                    "offset-y": map.get($selected-disabled, "offset-y")
                  ),
                  $options: map.merge(
                      $options,
                      (
                        "with-property": false
                      )
                    )
                );
              }
            }
          }
        }
      }
    }
  } @else {
    @warn "@mixin define-toggle-item: Spritesheet '#{$name}' was not generate, because $name: '#{$name}' is not found.";
  }
}
