@use '../../base/mixins/typography' as font;
@use '../../base/mixins/glass' as glass;
@use '../../base/mixins/breakpoints' as break;
@use '../../base/functions' as *;

.table {
	&-basic {
		border-collapse: collapse;
		min-width: brandui-col-spacing(6);

		&-wrapper {
			border-radius: var(--padding-extra-small);
			border-width: 1px;
			border-style: solid;
			overflow-y: hidden;
			border-color: var(--ui-fill);
		}

		tr:nth-child(even) {
			background-color: var(--ui-fill);
		}

		&-caption {
			width: brandui-col-spacing(6);

			&-content {
				max-width: brandui-col-spacing(3);

				@include break.max-mobile {
					max-width: 100%;
				}
			}

			@include break.max-mobile {
				width: brandui-col-spacing(12);
				text-align: center;
			}
		}

		&-col-header {
			min-width: 200px;
			padding: var(--padding-small);

			@include font.get-typography(subhead-small);

			background-color: var(--ui-fill);

			&-wrapper {
				text-align: left;
				vertical-align: top;
			}
		}

		&-row-header {
			vertical-align: middle;
			background-color: var(--ui-body);

			&-content {
				padding: var(--padding-small);
			}
		}

		&-row-data {
			&-content {
				padding: var(--padding-small);
			}
		}
	}

	&-multi-dimensional {
		border-collapse: collapse;
		border-radius: var(--padding-extra-small) var(--padding-extra-small) 0 0;
		overflow-y: hidden;

		tr:nth-child(even) {
			background-color: var(--ui-surface);
		}

		&-caption {
			width: brandui-col-spacing(6);

			&-content {
				max-width: brandui-col-spacing(3);

				@include break.max-mobile {
					max-width: 100%;
				}
			}

			@include break.max-mobile {
				width: brandui-col-spacing(12);
				text-align: center;
			}
		}

		&-col-header {
			min-width: 200px;
			padding: var(--padding-small);
			background-color: var(--ui-body);

			&-wrapper {
				vertical-align: top;
			}
		}

		&-row-header {
			vertical-align: middle;
			background-color: var(--ui-body);

			&-content {
				padding: var(--padding-small);
			}
		}

		&-row-data {
			&-content {
				padding: var(--padding-small);
			}
		}
	}

	&-comparison {
		&-caption {
			width: brandui-col-spacing(6);

			&-content {
				max-width: brandui-col-spacing(3);

				@include break.max-mobile {
					max-width: 100%;
				}
			}

			@include break.max-mobile {
				width: brandui-col-spacing(12);
				text-align: center;
			}
		}

		&-col {
			&-header {
				display: flex;
				flex-direction: column;
				align-items: center;

				@include font.get-typography(subhead-small);

				color: var(--ui-headline);
			}
		}

		&-group {
			&-header {
				display: block;
				width: 100%;
				margin: var(--padding-extra-large) 0 var(--padding-medium);

				&-content {
					border-radius: var(--radius-large);
					padding: var(--padding-small);
					text-align: left;

					@include font.get-typography(body-bold);

					background-color: var(--ui-fill);
				}
			}
		}

		&-row {
			&-header {
				width: brandui-col-spacing(4);
				padding-left: var(--padding-small);
				text-align: left;
				vertical-align: top;

				&-content {
					margin-bottom: var(--padding-extra-small);

					@include font.get-typography(body-bold);
				}

				@include break.max-mobile {
					width: brandui-col-spacing(12);
				}
			}

			&-data {
				width: brandui-col-spacing(2);
				text-align: center;
				vertical-align: top;

				&-content {
					margin-bottom: var(--padding-extra-small);
					display: flex;
					justify-content: center;

					@include font.get-typography(body-bold);
				}

				@include break.max-mobile {
					width: brandui-col-spacing(3);
					max-width: max-content;
				}
			}
		}
	}

	&-product-comparison {
		border-collapse: collapse;

		&-wrapper {
			border-radius: 1rem;
			overflow-x: auto;
			min-width: brandui-col-spacing(6);
		}

		tr {
			td:nth-child(even),
			th:nth-child(even) {
				background-color: var(--ui-body);
			}

			td:nth-child(odd),
			th:nth-child(odd) {
				background-color: var(--ui-surface);
			}

			&:not(:last-child) {
				.table-product-comparison-row-header,
				.table-product-comparison-row-data {
					border-bottom: 3px solid with-opacity(var(--ui-stroke), 50);
				}
			}
		}

		&-cell-content {
			padding: var(--padding-large) var(--padding-medium);
		}

		&-col-header {
			text-align: start;

			&-wrapper {
				padding: var(--padding-large) var(--padding-medium);
				border-bottom: 3px solid with-opacity(var(--ui-stroke), 50);
			}
		}

		&-row-header {
			vertical-align: middle;
			background-color: var(--ui-body);

			&-content {
				padding: var(--padding-large) var(--padding-medium);
				text-align: start;
			}
		}

		&-row-data {
			.table-product-comparison-cell-content {
				display: flex;
				gap: var(--padding-medium);
			}
		}
	}
}

.brandui-table {
	max-width: 100%;
	margin-left: auto;
	margin-right: auto;
	border-width: 0.1875rem;
	border-style: solid;
	border-radius: var(--radius-large);
	box-shadow: var(--shadow-outline);
	overflow: hidden;

	@include glass.border-glass;

	.table-wrapper {
		width: 100%;
		overflow-x: scroll;
		background-color: var(--default);

		table {
			width: 100%;
			border-collapse: collapse;

			@include font.get-typography(body-small);

			caption {
				margin-bottom: 0;

				@include font.get-typography(subhead);
			}

			thead,
			tfoot {
				cursor: default;
				font-weight: 600;
				border-collapse: separate;

				@include font.get-typography(body-small-medium);

				color: var(--headline);
			}

			thead {
				border-bottom: 0.0625rem solid var(--ui-stroke);
			}

			tfoot {
				border-top: 0.0625rem solid var(--ui-stroke);
			}

			tr {
				border-bottom-width: 0.0625rem;
				border-bottom-style: solid;
				border-color: var(--ui-accent);

				&:nth-child(2n) {
					background-color: var(--ui-accent);
				}

				&:last-of-type {
					border: none;
				}
			}

			td,
			th,
			col {
				padding: var(--padding-small);
				position: relative;
			}
		}

		&.sortable {
			table {
				thead {
					th,
					td {
						border-width: 0.252rem;
						border-style: solid;
						border-color: transparent;
						border-radius: var(--radius-large);
						cursor: pointer;
						padding-top: var(--padding-extra-small);
						padding-bottom: var(--padding-extra-small);
						vertical-align: middle;

						&.active,
						&:hover {
							background-color: with-opacity(var(--action), 5);
						}

						&.active {
							padding-left: var(--padding-extra-small);
							color: var(--action);
						}
					}
				}
			}
		}
	}

	.table-description {
		padding: var(--padding-small);
		text-align: left;
		background-color: var(--default);
	}
}
