@use 'sass:color';
@use 'sass:map';

@use 'config';
@use 'function' as *;
@use '../common/var' as *;

// set css var value, because we need translate value to string
// for example:
// @include set-css-var-value(('color', 'primary'), red);
// --fb-color-primary: red;
@mixin set-css-var-value($name, $value) {
	#{joinVarName($name)}: #{$value};
}

// @include set-css-var-type('color', 'primary', $map);
// --fb-color-primary: #{map.get($map, 'primary')};
@mixin set-css-var-type($name, $type, $variables) {
	#{getCssVarName($name, $type)}: #{map.get($variables, $type)};
}

@mixin set-css-color-type($colors, $type) {
	@include set-css-var-value(('color', $type), map.get($colors, $type, 'base'));

	@each $i in (3, 5, 7, 8, 9) {
		@include set-css-var-value(('color', $type, 'light', $i), map.get($colors, $type, 'light-#{$i}'));
	}

	@include set-css-var-value(('color', $type, 'dark-2'), map.get($colors, $type, 'dark-2'));
}

// set all css var for component by map
@mixin set-component-css-var($name, $variables) {
	@each $attribute, $value in $variables {
		@if $attribute == 'default' {
			#{getCssVarName($name)}: #{$value};
		} @else {
			#{getCssVarName($name, $attribute)}: #{$value};
		}
	}
}

@mixin set-css-color-rgb($type) {
	$color: map.get($colors, $type, 'base');
	@include set-css-var-value(('color', $type, 'rgb'), #{color.red($color), color.green($color), color.blue($color)});
}

// generate css var from existing css var
// for example:
// @include css-var-from-global(('button', 'text-color'), ('color', $type))
// --fb-button-text-color: var(--fb-color-#{$type});
@mixin css-var-from-global($var, $gVar) {
	$varName: joinVarName($var);
	$gVarName: joinVarName($gVar);

	#{$varName}: var(#{$gVarName});
}
