// stylelint-disable max-line-length
@use '../../../../utils/map' as *;

////
/// @package theming
/// @group schemas
/// @access public
/// @author <a href="https://github.com/simeonoff" target="_blank">Simeon Simeonoff</a>
////

/// Generates a base light bullet graph schema.
/// @access private
/// @type Map
$light-graph: (
    _meta: (
        name: 'bullet-graph',
        variant: 'light',
    ),
);

/// Generates a material graph schema.
/// @type Map
/// @prop {Color} backing-brush [(color: 'surface', darken: 5%)] - Sets the brush to use to fill the backing of the bullet graph.
/// @prop {Color} backing-outline [(color: 'surface', darken: 8%)] - Sets the brush to use for the outline of the backing.
/// @prop {Number} backing-stroke-thickness [null] - Sets the stroke thickness of the backing outline.
/// @prop {Color} font-brush [(contrast-color: 'surface')] - Sets the brush to use for the label font.
/// @prop {Color} minor-tick-brush [(contrast-color: 'surface')] - Sets the brush to use for the minor tickmarks.
/// @prop {Number} minor-tick-thickness [null] - Stroke thickness to use when rendering minor ticks.
/// @prop {List} range-brushes [series] - Sets a collection of brushes to be used as the palette for bullet graph ranges.
/// @prop {List} range-outlines [series] - Sets a collection of brushes to be used as the palette for bullet graph outlines.
/// @prop {Color} scale-background-brush [(color: 'primary')] - Sets the background brush for the scale.
/// @prop {Color} scale-background-outline [(color: 'surface')] - Sets the background outline for the scale.
/// @prop {Number} scale-background-thickness [null] - Sets the background outline thickness for the scale.
/// @prop {Number} target-value-breadth [null] - Sets the breadth of the target value element.
/// @prop {Color} target-value-brush [color('gray', 800)] - Sets the brush to use when rendering the fill of the comparative marker.
/// @prop {Color} target-value-outline [null] - Sets the brush to use when rendering the outline of the target value.
/// @prop {Number} target-value-thickness [null] - Sets the stroke thickness of the outline of the target value bar.
/// @prop {Color} tick-brush [(contrast-color: 'surface')] - Sets the brush to use for the major tickmarks.
/// @prop {Number} tick-stroke-thickness [null] - Sets the stroke thickness to use when rendering ticks.
/// @prop {Color} value-brush [(color: ('gray', 800))] - Sets the brush to use for the actual value element.
/// @prop {Color} value-outline [null] - Sets the brush to use for the outline of actual value element.
/// @prop {Number} value-stroke-thickness [null] - Sets the stroke thickness to use when rendering single actual value element.
$material-graph: extend(
    $light-graph,
    (
        backing-brush: (
            color: 'surface',
        ),
        backing-outline: (
            color: 'surface',
        ),
        backing-stroke-thickness: null,
        font-brush: (
            contrast-color: (
                'surface',
                500,
            ),
        ),
        minor-tick-brush: (
            contrast-color: (
                'surface',
                500,
            ),
        ),
        minor-tick-thickness: null,
        range-brushes: series,
        range-outlines: series,
        scale-background-brush: (
            color: 'primary',
        ),
        scale-background-outline: (
            color: 'surface',
        ),
        scale-background-thickness: null,
        target-value-breadth: null,
        target-value-brush: (
            color: (
                'gray',
                800,
            ),
        ),
        target-value-outline: null,
        target-value-thickness: null,
        tick-brush: (
            contrast-color: (
                'surface',
                500,
            ),
        ),
        tick-stroke-thickness: null,
        value-brush: (
            color: (
                'gray',
                800,
            ),
        ),
        value-outline: null,
        value-stroke-thickness: null,
        _meta: (
            theme: 'material',
        ),
    )
);

/// Generates a fluent graph schema.
/// @type Map
/// @requires $material-graph
$fluent-graph: extend(
    $material-graph,
    (
        _meta: (
            theme: 'fluent',
        ),
    )
);

/// Generates a bootstrap graph schema.
/// @type Map
/// @requires $material-graph
$bootstrap-graph: extend(
    $material-graph,
    (
        _meta: (
            theme: 'bootstrap',
        ),
    )
);

/// Generates an indigo graph schema.
/// @type Map
/// @requires $material-graph
$indigo-graph: extend(
    $material-graph,
    (
        _meta: (
            theme: 'indigo',
        ),
    )
);
