@use "sass:map";
@use "sass:math";
@use "sass:string";
@use "sass:list";
@use "../../functions/index" as fi;

// 如g-m-10, g-m-tb-10...

$base-options: (name: margin);

@mixin margin($keys, $list, $options: ()) {
	$options: fi.merge($base-options, $options);
	$prefix: fi.prefix($base-options, $options);

	@each $key in $keys {
		@if  string.length($key) > 4 {
			@debug error margin;
		} @else {
			@each $value in $list {
				$suffix: #{if(sass(string.length($key) >= 1): #{$key}-; else: "")}#{fi.suffix($value, $options)};
				$_value: fi.unitfix($value, $options);
				#{$prefix}#{$suffix} {
					@if  string.length($key) == 0 {
						margin: $_value;
					} @else {
						$len: string.length($key);

						@while $len > 0 {
							$__key: map.get(fi.$direction-map, string.slice($key, $len, $len));

							@if  $__key {
								margin-#{$__key}: $_value;
							}

							$len: $len - 1;
						}
					}
				}
			}
		}
	}
}
