//
// Copyright 2023 Google LLC
// SPDX-License-Identifier: Apache-2.0
//
// [Modified by Sandlada & Kai Orion]
//
// @license
// Copyright 2025 Sandlada & Kai Orion
// SPDX-License-Identifier: MIT
//

@use 'sass:map';
@use './md-sys-color';
@use './md-sys-shape';
@use './md-sys-state';
@use './md-sys-typescale';

$_default: (
    'md-sys-color': md-sys-color.values-light(),
    'md-sys-shape': md-sys-shape.values(),
    'md-sys-state': md-sys-state.values(),
    'md-sys-typescale': md-sys-typescale.values(),
);

@function values($deps: $_default, $exclude-hardcoded-values: false) {
    @return (
        'extra-small-container-height': if($exclude-hardcoded-values, null, 32px),
        'small-container-height': if($exclude-hardcoded-values, null, 40px),
        'medium-container-height': if($exclude-hardcoded-values, null, 56px),
        'large-container-height': if($exclude-hardcoded-values, null, 96px),
        'extra-large-container-height': if($exclude-hardcoded-values, null, 136px),
        'extra-small-icon-size': if($exclude-hardcoded-values, null, 20px),
        'small-icon-size': if($exclude-hardcoded-values, null, 20px),
        'medium-icon-size': if($exclude-hardcoded-values, null, 24px),
        'large-icon-size': if($exclude-hardcoded-values, null, 32px),
        'extra-large-icon-size': if($exclude-hardcoded-values, null, 40px),
        'extra-small-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-full'),
        'small-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-full'),
        'medium-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-full'),
        'large-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-full'),
        'extra-large-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-full'),
        'extra-small-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-medium'),
        'small-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-medium'),
        'medium-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-large'),
        'large-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-extra-large'),
        'extra-large-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-extra-large'),
        'extra-small-leading-space': if($exclude-hardcoded-values, null, 12px),
        'small-leading-space': if($exclude-hardcoded-values, null, 16px),
        'medium-leading-space': if($exclude-hardcoded-values, null, 24px),
        'large-leading-space': if($exclude-hardcoded-values, null, 48px),
        'extra-large-leading-space': if($exclude-hardcoded-values, null, 64px),
        'extra-small-between-icon-label-space': if($exclude-hardcoded-values, null, 8px),
        'small-between-icon-label-space': if($exclude-hardcoded-values, null, 8px),
        'medium-between-icon-label-space': if($exclude-hardcoded-values, null, 8px),
        'large-between-icon-label-space': if($exclude-hardcoded-values, null, 12px),
        'extra-large-between-icon-label-space': if($exclude-hardcoded-values, null, 16px),
        'extra-small-trailing-space': if($exclude-hardcoded-values, null, 12px),
        'small-trailing-space': if($exclude-hardcoded-values, null, 16px),
        'medium-trailing-space': if($exclude-hardcoded-values, null, 24px),
        'large-trailing-space': if($exclude-hardcoded-values, null, 48px),
        'extra-large-trailing-space': if($exclude-hardcoded-values, null, 64px),
        'extra-small-pressed-container-shape-morph': map.get($deps, 'md-sys-shape', 'corner-small'),
        'small-pressed-container-shape-morph': map.get($deps, 'md-sys-shape', 'corner-small'),
        'medium-pressed-container-shape-morph': map.get($deps, 'md-sys-shape', 'corner-medium'),
        'large-pressed-container-shape-morph': map.get($deps, 'md-sys-shape', 'corner-large'),
        'extra-large-pressed-container-shape-morph': map.get($deps, 'md-sys-shape', 'corner-large'),
        'extra-small-toggle-selected-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-medium'),
        'small-toggle-selected-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-medium'),
        'medium-toggle-selected-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-large'),
        'large-toggle-selected-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-extra-large'),
        'extra-large-toggle-selected-container-shape-round': map.get($deps, 'md-sys-shape', 'corner-extra-large'),
        'extra-small-toggle-selected-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-full'),
        'small-toggle-selected-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-full'),
        'medium-toggle-selected-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-full'),
        'large-toggle-selected-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-full'),
        'extra-large-toggle-selected-container-shape-square': map.get($deps, 'md-sys-shape', 'corner-full'),
        'disabled-container-color': map.get($deps, 'md-sys-color', 'on-surface'),
        'disabled-container-opacity': if($exclude-hardcoded-values, null, 0.1),
        'label-text-color': map.get($deps, 'md-sys-color', 'primary'),
        'disabled-label-text-color': map.get($deps, 'md-sys-color', 'on-surface'),
        'disabled-label-text-opacity': if($exclude-hardcoded-values, null, 0.38),
        'focus-label-text-color': map.get($deps, 'md-sys-color', 'primary'),
        'focus-state-layer-color': map.get($deps, 'md-sys-color', 'primary'),
        'focus-state-layer-opacity': map.get($deps, 'md-sys-state', 'focus-state-layer-opacity'),
        'hover-label-text-color': map.get($deps, 'md-sys-color', 'primary'),
        'hover-state-layer-color': map.get($deps, 'md-sys-color', 'primary'),
        'hover-state-layer-opacity': map.get($deps, 'md-sys-state', 'hover-state-layer-opacity'),
        'pressed-label-text-color': map.get($deps, 'md-sys-color', 'primary'),
        'pressed-state-layer-color': map.get($deps, 'md-sys-color', 'primary'),
        'pressed-state-layer-opacity': map.get($deps, 'md-sys-state', 'pressed-state-layer-opacity'),
        'disabled-icon-color': map.get($deps, 'md-sys-color', 'on-surface'),
        'disabled-icon-opacity': if($exclude-hardcoded-values, null, 0.38),
        'focus-icon-color': map.get($deps, 'md-sys-color', 'primary'),
        'hover-icon-color': map.get($deps, 'md-sys-color', 'primary'),
        'icon-color': map.get($deps, 'md-sys-color', 'primary'),
        'pressed-icon-color': map.get($deps, 'md-sys-color', 'primary'),
        'extra-small-label-text-font': map.get($deps, 'md-sys-typescale', 'label-large-font'),
        'extra-small-label-text-line-height': map.get($deps, 'md-sys-typescale', 'label-large-line-height'),
        'extra-small-label-text-size': map.get($deps, 'md-sys-typescale', 'label-large-size'),
        'extra-small-label-text-tracking': map.get($deps, 'md-sys-typescale', 'label-large-tracking'),
        'extra-small-label-text-weight': map.get($deps, 'md-sys-typescale', 'label-large-weight'),
        'extra-small-label-text-type':
            if(
                $exclude-hardcoded-values,
                null,
                map.get($deps, 'md-sys-typescale', 'label-large-weight') map.get($deps, 'md-sys-typescale', 'label-large-size') #{'/'} map.get($deps, 'md-sys-typescale', 'label-large-line-height') map.get($deps, 'md-sys-typescale', 'label-large-font')
            ),
        'small-label-text-font': map.get($deps, 'md-sys-typescale', 'label-large-font'),
        'small-label-text-line-height': map.get($deps, 'md-sys-typescale', 'label-large-line-height'),
        'small-label-text-size': map.get($deps, 'md-sys-typescale', 'label-large-size'),
        'small-label-text-tracking': map.get($deps, 'md-sys-typescale', 'label-large-tracking'),
        'small-label-text-weight': map.get($deps, 'md-sys-typescale', 'label-large-weight'),
        'small-label-text-type':
            if(
                $exclude-hardcoded-values,
                null,
                map.get($deps, 'md-sys-typescale', 'label-large-weight') map.get($deps, 'md-sys-typescale', 'label-large-size') #{'/'} map.get($deps, 'md-sys-typescale', 'label-large-line-height') map.get($deps, 'md-sys-typescale', 'label-large-font')
            ),
        'medium-label-text-font': map.get($deps, 'md-sys-typescale', 'title-medium-font'),
        'medium-label-text-line-height': map.get($deps, 'md-sys-typescale', 'title-medium-line-height'),
        'medium-label-text-size': map.get($deps, 'md-sys-typescale', 'title-medium-size'),
        'medium-label-text-tracking': map.get($deps, 'md-sys-typescale', 'title-medium-tracking'),
        'medium-label-text-weight': map.get($deps, 'md-sys-typescale', 'title-medium-weight'),
        'medium-label-text-type':
            if(
                $exclude-hardcoded-values,
                null,
                map.get($deps, 'md-sys-typescale', 'title-medium-weight') map.get($deps, 'md-sys-typescale', 'title-medium-size') #{'/'} map.get($deps, 'md-sys-typescale', 'title-medium-line-height') map.get($deps, 'md-sys-typescale', 'title-medium-font')
            ),
        'large-label-text-font': map.get($deps, 'md-sys-typescale', 'headline-small-font'),
        'large-label-text-line-height': map.get($deps, 'md-sys-typescale', 'headline-small-line-height'),
        'large-label-text-size': map.get($deps, 'md-sys-typescale', 'headline-small-size'),
        'large-label-text-tracking': map.get($deps, 'md-sys-typescale', 'headline-small-tracking'),
        'large-label-text-weight': map.get($deps, 'md-sys-typescale', 'headline-small-weight'),
        'large-label-text-type':
            if(
                $exclude-hardcoded-values,
                null,
                map.get($deps, 'md-sys-typescale', 'headline-small-weight') map.get($deps, 'md-sys-typescale', 'headline-small-size') #{'/'} map.get($deps, 'md-sys-typescale', 'headline-small-line-height') map.get($deps, 'md-sys-typescale', 'headline-small-font')
            ),
        'extra-large-label-text-font': map.get($deps, 'md-sys-typescale', 'headline-large-font'),
        'extra-large-label-text-line-height': map.get($deps, 'md-sys-typescale', 'headline-large-line-height'),
        'extra-large-label-text-size': map.get($deps, 'md-sys-typescale', 'headline-large-size'),
        'extra-large-label-text-tracking': map.get($deps, 'md-sys-typescale', 'headline-large-tracking'),
        'extra-large-label-text-weight': map.get($deps, 'md-sys-typescale', 'headline-large-weight'),
        'extra-large-label-text-type':
            if(
                $exclude-hardcoded-values,
                null,
                map.get($deps, 'md-sys-typescale', 'headline-large-weight') map.get($deps, 'md-sys-typescale', 'headline-large-size') #{'/'} map.get($deps, 'md-sys-typescale', 'headline-large-line-height') map.get($deps, 'md-sys-typescale', 'headline-large-font')
            )
    );
}
