@use 'mixins/mixins' as *;
@use 'mixins/var' as *;
@use 'mixins/utils' as *;
@use 'common/var' as *;
@use 'common/transition';

@mixin menu-item {
	display: flex;
	align-items: center;
	height: getCssVar('menu-item-height');
	line-height: getCssVar('menu-item-height');
	font-size: getCssVar('menu-item-font-size');
	color: getCssVar('menu-text-color');
	padding: 0 getCssVar('menu-base-level-padding');
	list-style: none;
	cursor: pointer;
	position: relative;
	transition:
		border-color getCssVar('transition-duration'),
		background-color getCssVar('transition-duration'),
		color getCssVar('transition-duration');
	box-sizing: border-box;
	white-space: nowrap;

	* {
		vertical-align: bottom;
	}

	i {
		color: inherit;
	}

	&:hover,
	&:focus {
		outline: none;
	}

	&:hover {
		background-color: getCssVar('menu-hover-bg-color');
	}

	@include when(disabled) {
		opacity: 0.25;
		cursor: not-allowed;
		background: none !important;
	}
}

:root {
	// They are defined on :root so they can be inherited by sub-menu instead of overwritten
	@include set-component-css-var('menu', $menu);
}

@include b(menu) {
	border-right: solid 1px getCssVar('menu-border-color');
	list-style: none;
	position: relative;
	margin: 0;
	padding-left: 0;
	background-color: getCssVar('menu-bg-color');
	box-sizing: border-box;

	@include m(vertical) {
		&:not(.#{$namespace}-menu--collapse):not(.#{$namespace}-menu--popup-container) {
			& .#{$namespace}-menu-item,
			& .#{$namespace}-sub-menu__title,
			& .#{$namespace}-menu-item-group__title {
				white-space: nowrap;
				padding-left: calc(#{getCssVar('menu-base-level-padding')} + #{getCssVar('menu-level')} * #{getCssVar('menu-level-padding')});
			}
		}
	}

	&:not(.#{$namespace}-menu--collapse) .#{$namespace}-sub-menu__title {
		padding-right: calc(#{getCssVar('menu-base-level-padding')} + #{getCssVar('menu-icon-width')});
	}

	@include m(horizontal) {
		// reset menu-item popup height
		&.#{$namespace}-menu--popup-container {
			height: unset;
		}

		display: flex;
		flex-wrap: nowrap;
		border-right: none;
		height: getCssVar('menu-horizontal-height');

		&.#{$namespace}-menu {
			border-bottom: solid 1px getCssVar('menu-border-color');
		}

		& > .#{$namespace}-menu-item {
			display: inline-flex;
			justify-content: center;
			align-items: center;
			height: 100%;
			margin: 0;
			border-bottom: 2px solid transparent;
			color: getCssVar('menu-text-color');

			a,
			a:hover {
				color: inherit;
			}
		}
		& > .#{$namespace}-sub-menu {
			&:focus,
			&:hover {
				outline: none;
			}

			&:hover {
				.#{$namespace}-sub-menu__title {
					color: getCssVar('menu-hover-text-color');
				}
			}

			&.is-active {
				.#{$namespace}-sub-menu__title {
					border-bottom: 2px solid getCssVar('menu-active-color');
					color: getCssVar('menu-active-color');
				}
			}

			& .#{$namespace}-sub-menu__title {
				height: 100%;
				border-bottom: 2px solid transparent;
				color: getCssVar('menu-text-color');

				&:hover {
					background-color: getCssVar('menu-bg-color');
				}
			}
		}
		& .#{$namespace}-menu {
			& .#{$namespace}-menu-item,
			& .#{$namespace}-sub-menu__title {
				background-color: getCssVar('menu-bg-color');
				display: flex;
				align-items: center;
				height: getCssVar('menu-horizontal-sub-item-height');
				line-height: getCssVar('menu-horizontal-sub-item-height');
				padding: 0 10px;
				color: getCssVar('menu-text-color');
			}

			& .#{$namespace}-sub-menu__title {
				padding-right: 40px;
			}

			& .#{$namespace}-menu-item.is-active,
			& .#{$namespace}-sub-menu.is-active > .#{$namespace}-sub-menu__title {
				color: getCssVar('menu-active-color');
			}
		}
		& .#{$namespace}-menu-item:not(.is-disabled):hover,
		& .#{$namespace}-menu-item:not(.is-disabled):focus {
			outline: none;
			color: getCssVar('menu-hover-text-color');
			background-color: getCssVar('menu-hover-bg-color');
		}
		& > .#{$namespace}-menu-item.is-active {
			border-bottom: 2px solid getCssVar('menu-active-color');
			color: getCssVar('menu-active-color') !important;
		}
	}
	@include m(collapse) {
		width: calc(#{getCssVar('menu-icon-width')} + #{getCssVar('menu-base-level-padding')} * 2);

		> .#{$namespace}-menu-item,
		> .#{$namespace}-sub-menu > .#{$namespace}-sub-menu__title,
		> .#{$namespace}-menu-item-group > ul > .#{$namespace}-sub-menu > .#{$namespace}-sub-menu__title {
			[class^='#{$namespace}-icon'] {
				margin: 0;
				vertical-align: middle;
				width: getCssVar('menu-icon-width');
				text-align: center;
			}

			.#{$namespace}-sub-menu__icon-arrow {
				display: none;
			}

			> span {
				height: 0;
				width: 0;
				overflow: hidden;
				visibility: hidden;
				display: inline-block;
			}
		}

		> .#{$namespace}-menu-item.is-active i {
			color: inherit;
		}

		.#{$namespace}-menu .#{$namespace}-sub-menu {
			min-width: 200px;
		}

		.#{$namespace}-sub-menu {
			&.is-active .#{$namespace}-sub-menu__title {
				color: getCssVar('menu-active-color');
			}
		}
	}
	@include m(popup) {
		z-index: 100;
		min-width: 200px;
		border: none;
		padding: 5px 0;
		border-radius: getCssVar('border-radius-small');
		box-shadow: getCssVar('box-shadow-light');
	}

	.#{$namespace}-icon {
		flex-shrink: 0;
	}
}

@include b(menu-item) {
	@include menu-item;

	& [class^='#{$namespace}-icon'] {
		margin-right: 5px;
		width: getCssVar('menu-icon-width');
		text-align: center;
		font-size: 18px;
		vertical-align: middle;
	}
	@include when(active) {
		color: getCssVar('menu-active-color');

		i {
			color: inherit;
		}
	}
	.#{$namespace}-menu-tooltip__trigger {
		position: absolute;
		left: 0;
		top: 0;
		height: 100%;
		width: 100%;
		display: inline-flex;
		align-items: center;
		box-sizing: border-box;
		padding: 0 getCssVar('menu-base-level-padding');
	}
}

@include b(sub-menu) {
	list-style: none;
	margin: 0;
	padding-left: 0;

	@include e(title) {
		@include menu-item;

		&:hover {
			background-color: getCssVar('menu-hover-bg-color');
		}
	}
	& .#{$namespace}-menu {
		border: none;
	}
	& .#{$namespace}-menu-item {
		height: getCssVar('menu-sub-item-height');
		line-height: getCssVar('menu-sub-item-height');
	}
	@include e(hide-arrow) {
		.#{$namespace}-sub-menu__icon-arrow {
			display: none !important;
		}
	}
	@include when(active) {
		.#{$namespace}-sub-menu__title {
			border-bottom-color: getCssVar('menu-active-color');
		}
	}
	@include when(disabled) {
		.#{$namespace}-sub-menu__title,
		.#{$namespace}-menu-item {
			opacity: 0.25;
			cursor: not-allowed;
			background: none !important;
		}
	}
	.#{$namespace}-icon {
		vertical-align: middle;
		margin-right: 5px;
		width: getCssVar('menu-icon-width');
		text-align: center;
		font-size: 18px;

		&.#{$namespace}-sub-menu__icon-more {
			margin-right: 0 !important;
		}
	}
	.#{$namespace}-sub-menu__icon-arrow {
		position: absolute;
		top: 50%;
		right: getCssVar('menu-base-level-padding');
		margin-top: -6px;
		transition: transform getCssVar('transition-duration');
		font-size: 12px;
		margin-right: 0;
		width: inherit;
	}
}

@include b(menu-item-group) {
	> ul {
		padding: 0;
	}
	@include e(title) {
		padding: 7px 0 7px getCssVar('menu-base-level-padding');
		line-height: normal;
		font-size: 12px;
		color: getCssVar('text-color', 'secondary');
	}
}

.horizontal-collapse-transition .#{$namespace}-sub-menu__title .#{$namespace}-sub-menu__icon-arrow {
	transition: getCssVar('transition-duration-fast');
	opacity: 0;
}
