@use 'sass:map';
@use 'sass:meta';
@use 'sass:list';
@use '../../config';
@use '../../functions' as *;
@use '../../schemas/' as *;
@use '../../../utils/map' as *;
@use '../../../color/functions' as *;
@use '../../../elevations/' as *;

////
/// @package theming
/// @group themes
/// @access public
////

/// Circular Progress Theme
///
/// This theme has no automatic token derivation. All fill colors are independent.
/// The fill-color-default can accept a single color or a list of two colors for gradient effect.
///
/// @param {Map} $schema [$light-material-schema] - The schema used as basis for styling the component.
/// @param {Color} $track-color [null] - The base circle fill color.
/// @param {Color | List<Color>} $fill-color-default [null] - The progress circle fill color. Can be a single color or list of two colors for gradient.
/// @param {Color} $fill-color-danger [null] - The track danger fill color.
/// @param {Color} $fill-color-warning [null] - The track warning fill color.
/// @param {Color} $fill-color-info [null] - The track info fill color.
/// @param {Color} $fill-color-success [null] - The track success fill color.
/// @param {Color} $text-color [null] - The value text color.
/// @param {Number} $diameter [null] - The progress circle diameter.
///
/// @requires $light-material-schema
///
/// @example scss - Change the circle progress color
///   $my-progress-circular-theme: progress-circular-theme(
///     $fill-color-default: purple
///   );
///   // Pass the theme to the igx-progress-circular component mixin
///   @include igx-progress-circular($my-progress-circle-theme);
@function progress-circular-theme(
    $schema: $light-material-schema,
    $track-color: null,
    $fill-color-default: null,
    $fill-color-danger: null,
    $fill-color-warning: null,
    $fill-color-info: null,
    $fill-color-success: null,
    $text-color: null,
    $diameter: null
) {
    $selector: (
        #{config.element-prefix() + '-' + 'circular-bar'},
        #{config.element-prefix() + '-' + 'circular-progress'}
    );
    $circular-bar-schema: ();

    @if map.has-key($schema, 'circular-bar') {
        $circular-bar-schema: map.get($schema, 'circular-bar');
    } @else {
        $circular-bar-schema: $schema;
    }

    $theme: digest-schema($circular-bar-schema);
    $fill-color-default-start: map.get($theme, 'fill-color-default');
    $fill-color-default-end: map.get($theme, 'fill-color-default');

    @if meta.type-of($fill-color-default) == 'color' {
        $fill-color-default-start: $fill-color-default;
        $fill-color-default-end: $fill-color-default;
    }

    @if list.length($fill-color-default) == 2 {
        $fill-color-default-start: list.nth($fill-color-default, 1);
        $fill-color-default-end: list.nth($fill-color-default, 2);
    }

    @return extend(
        $theme,
        (
            selector: $selector,
            track-color: $track-color,
            fill-color-default: $fill-color-default,
            fill-color-default-start: $fill-color-default-start,
            fill-color-default-end: $fill-color-default-end,
            fill-color-danger: $fill-color-danger,
            fill-color-warning: $fill-color-warning,
            fill-color-info: $fill-color-info,
            fill-color-success: $fill-color-success,
            text-color: $text-color,
            diameter: $diameter,
        )
    );
}
