@use 'sass:map';
@use 'sass:color';
@use '../core';
@use '../theming' as *;

/// Global theme tokens
///
/// @group Theming
@mixin daff-root-theme-tokens($theme) {
	$base: daff-get-base-color($theme, base);
	$base-contrast: daff-get-base-color($theme, base-contrast);
	$primary: daff-get-palette($theme, primary);
	$secondary: daff-get-palette($theme, secondary);
	$tertiary: daff-get-palette($theme, tertiary);
	$warn: daff-get-palette($theme, warn);
	$success: daff-get-palette($theme, success);
	$critical: daff-get-palette($theme, critical);
	$neutral: daff-get-palette($theme, neutral);
	$white: daff-get-base-color($theme, 'white');
	$black: daff-get-base-color($theme, 'black');

	--daff-theme-rgb: #{color.red($base), color.green($base), color.blue($base)};
	--daff-theme-contrast-rgb: #{color.red($base-contrast), color.green($base-contrast),
		color.blue($base-contrast)};
	--daff-theme: #{$base};
	--daff-theme-contrast: #{$base-contrast};
	--daff-theme-primary: #{daff-color($primary)};
	--daff-theme-secondary: #{daff-color($secondary)};
	--daff-theme-tertiary: #{daff-color($tertiary)};
	--daff-theme-warn: #{daff-color($warn)};
	--daff-theme-success: #{daff-color($success)};
	--daff-theme-critical: #{daff-color($critical)};
	--daff-theme-white: #{$white};
	--daff-theme-black: #{$black};
	--daff-theme-gray: #{daff-color($neutral)};
	--daff-base-bg: #{$base};
	--daff-base-text: #{daff-text-contrast($base)};
}

@mixin daff-theme-css-variables($theme) {
	@each $selector in & {
		@if ($selector == null) {
			:root {
				@include daff-root-theme-tokens($theme);
			}
		}
		@else {
			@include daff-root-theme-tokens($theme);
		}
	}
}
