@use '../../../../utils/map' as *;
@use '../../../../typography/functions' as *;
@use '../elevation/bottom-nav' as *;

////
/// @package theming
/// @group schemas
/// @access public
////

/// Generates a light bottom navigation scheme.
/// @type Map
/// @prop {Map} background [color: ('gray', 50)] - The background color used for the bottom nav.
/// @prop {Map} icon-color [color: ('gray', 700)] - The icon color used in idle state.
/// @prop {Map} icon-selected-color [color: ('primary', 500)] - The icon color used for the selected item.
/// @prop {Map} label-color [color: ('gray', 700)] - The label color used in idle state.
/// @prop {Map} icon-disabled-color [color: ('gray', 700)] - The disabled color of the icon.
/// @prop {Map} label-disabled-color [color: ('gray', 700)] - The disabled color of the label.
/// @prop {Map} label-selected-color [color: ('primary', 500)] - The label color used for the selected item.
/// @prop {Color} border-color [transparent] - The border color of the bottom navigation.
/// @prop {Map} typography [label: (value: 'caption')] - The typography styles used for the component.
/// @prop {Number} elevation [8] - The elevation level, between 0-24, to be used for the bottom nav.
/// @requires $default-elevation-bottom-nav
$light-bottom-nav: extend(
    $default-elevation-bottom-nav,
    (
        background: (
            color: (
                'gray',
                50,
            ),
        ),
        icon-color: (
            color: (
                'gray',
                700,
            ),
        ),
        icon-selected-color: (
            color: (
                'primary',
                500,
            ),
        ),
        label-color: (
            color: (
                'gray',
                700,
            ),
        ),
        label-selected-color: (
            color: (
                'primary',
                500,
            ),
        ),
        icon-disabled-color: (
            color: (
                'gray',
                700,
            ),
        ),
        label-disabled-color: (
            color: (
                'gray',
                700,
            ),
        ),
        border-color: transparent,
        typography: (
            label: (
                value: 'caption',
            ),
        ),

        _meta: (
            name: 'bottom-nav',
            variant: 'light',
        ),
    )
);

/// Generates a material bottom navigation schema.
/// @type Map
/// @prop {Map} icon-selected-color [color: ('primary', 800)] - The icon color used for the selected item.
/// @prop {Map} label-selected-color [color: ('primary', 800)] - The label color used for the selected item.
/// @requires $light-bottom-nav
$material-bottom-nav: extend(
    $light-bottom-nav,
    (
        icon-selected-color: (
            color: (
                'primary',
                800,
            ),
        ),
        label-selected-color: (
            color: (
                'primary',
                800,
            ),
        ),
        _meta: (
            theme: 'material',
        ),
    )
);

/// Generates a fluent bottom navigation schema.
/// @type Map
/// @prop {Number} elevation [1] - The elevation level, between 0-24, to be used for the bottom nav.
/// @requires $light-bottom-nav
/// @requires $fluent-elevation-bottom-nav
$fluent-bottom-nav: extend(
    $light-bottom-nav,
    $fluent-elevation-bottom-nav,
    (
        _meta: (
            theme: 'fluent',
        ),
    )
);

/// Generates a bootstrap bottom navigation schema.
/// @type Map
/// @requires $light-bottom-nav
$bootstrap-bottom-nav: extend(
    $light-bottom-nav,
    (
        _meta: (
            theme: 'bootstrap',
        ),
    )
);

/// Generates an indigo bottom navigation schema.
/// @type Map
/// @prop {Map} border-color [color: ('gray', 300)] - The border color of the bottom navigation.
/// @prop {Map} background [color: 'surface'] - The background color used for the bottom nav.
/// @prop {Map} icon-color [color: ('gray', 600)] - The icon color used in idle state.
/// @prop {Map} label-color [color: ('gray', 800)] - The label color used in idle state.
/// @prop {Map} icon-disabled-color [color: ('gray', 900, .2)] - The disabled color of the icon.
/// @prop {Map} label-disabled-color [color: ('gray', 900, .2)] - The disabled color of the label.
/// @prop {Number} elevation [4] - The elevation level, between 0-24, to be used for the bottom nav.
/// @requires $light-bottom-nav
/// @requires $indigo-elevation-bottom-nav
$indigo-bottom-nav: extend(
    $light-bottom-nav,
    $indigo-elevation-bottom-nav,
    (
        border-color: (
            color: (
                'gray',
                300,
            ),
        ),
        background: (
            color: 'surface',
        ),
        icon-color: (
            color: (
                'gray',
                600,
            ),
        ),
        label-color: (
            color: (
                'gray',
                800,
            ),
        ),
        icon-disabled-color: (
            color: (
                'gray',
                900,
                0.2,
            ),
        ),
        label-disabled-color: (
            color: (
                'gray',
                900,
                0.2,
            ),
        ),
        _meta: (
            theme: 'indigo',
        ),
    )
);
