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

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

/// Define item
/// @access private
/// @param {String} $name name of spritesheet item
/// @param {Map} $items [()] spritesheet items
/// @param {Map} $options [()] options
///
@mixin define-item($name, $items: (), $options: ()) {
  @if map.has-key($items, $name) {
    $on-args: (
      "capturing-selectors": map.get($options, "capturing-selectors")
    );

    &-#{$name} {
      $up: map.get($items, $name);

      @content;

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

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

        @include mixin.on-focus($on-args...) {
          @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}--current") {
        $current: map.get($items, "#{$name}--current");

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

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

        @include mixin.on-disabled($on-args...) {
          @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
                )
              )
          );
        }
      }
    }
  } @else {
    @warn "@mixin define-item: Spritesheet '#{$name}' was not generate, because $name: '#{$name}' is not found.";
  }
}
