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

@mixin button-plain($type) {
	$button-color-types: (
		'': (
			'text-color': (
				'color',
				$type,
			),
			'bg-color': (
				'color',
				$type,
				'light-9',
			),
			'border-color': (
				'color',
				$type,
				'light-5',
			),
		),
		'hover': (
			'text-color': (
				'color',
				'white',
			),
			'bg-color': (
				'color',
				$type,
			),
			'border-color': (
				'color',
				$type,
			),
		),
		'active': (
			'text-color': (
				'color',
				'white',
			),
		),
	);

	@each $type, $typeMap in $button-color-types {
		@each $typeColor, $list in $typeMap {
			@include css-var-from-global(('button', $type, $typeColor), $list);
		}
	}

	&.is-disabled {
		&,
		&:hover,
		&:focus,
		&:active {
			color: getCssVar('color', $type, 'light-5');
			background-color: getCssVar('color', $type, 'light-9');
			border-color: getCssVar('color', $type, 'light-8');
		}
	}
}

@mixin button-variant($type) {
	$button-color-types: (
		'': (
			'text-color': (
				'color',
				'white',
			),
			'bg-color': (
				'color',
				$type,
			),
			'border-color': (
				'color',
				$type,
			),
			'outline-color': (
				'color',
				$type,
				'light-5',
			),
			'active-color': (
				'color',
				$type,
				'dark-2',
			),
		),
		'hover': (
			'text-color': (
				'color',
				'white',
			),
			'link-text-color': (
				'color',
				$type,
				'light-5',
			),
			'bg-color': (
				'color',
				$type,
				'light-3',
			),
			'border-color': (
				'color',
				$type,
				'light-3',
			),
		),
		'active': (
			'bg-color': (
				'color',
				$type,
				'dark-2',
			),
			'border-color': (
				'color',
				$type,
				'dark-2',
			),
		),
		'disabled': (
			'text-color': (
				'color',
				'white',
			),
			'bg-color': (
				'color',
				$type,
				'light-5',
			),
			'border-color': (
				'color',
				$type,
				'light-5',
			),
		),
	);

	@each $type, $typeMap in $button-color-types {
		@each $typeColor, $list in $typeMap {
			@include css-var-from-global(('button', $type, $typeColor), $list);
		}
	}

	&.is-plain,
	&.is-text,
	&.is-link {
		@include button-plain($type);
	}
}

@mixin button-size($padding-vertical, $padding-horizontal, $font-size, $border-radius) {
	padding: $padding-vertical $padding-horizontal;
	font-size: $font-size;
	border-radius: $border-radius;

	&.is-round {
		padding: $padding-vertical $padding-horizontal;
	}
}
