@use '../utils/constants.scss';
@use '../utils/tokens.scss' as tokens;

@import '@viasat/beam-tokens/components/Spinner';

$initialRotation: -90;

$spinnerClassBase: '#{constants.$prefix}spinner';
$spinnerWrapClassBase: '#{$spinnerClassBase}-wrap';
$hasValueButNotEmptyValue: '[value]:not([value=""])';

$interdeterminateSuffix: '--indeterminate';
$determinateSuffix: '--determinate';

$spinnerIndeterminate: '#{$spinnerClassBase}#{$interdeterminateSuffix}';
$spinnerDeterminate: '#{$spinnerClassBase}#{$determinateSuffix}';

$svgEl: 'svg';
$circleEl: 'circle';
$circleBgEl: 'circle-bg';

$spinnerSvgClassBase: '#{$spinnerClassBase}__#{svgEl}';
$circleSvgClassBase: '#{$spinnerClassBase}__#{$circleEl}';
$circleBgClassBase: '#{$spinnerClassBase}__#{$circleBgEl}';

$spinnerVarPrefix: '--#{$spinnerClassBase}-' !default;

$spinnerStrokeWidth: '#{$spinnerVarPrefix}stroke-width';
$spinnerCircleRadiusVar: '#{$spinnerVarPrefix}circle-radius';
$spinnerSideLengthVar: '#{$spinnerVarPrefix}side-length';
$spinnerLabelToSpinnerSpacingVar: '#{$spinnerVarPrefix}label-to-spinner-spacing';
$spinnerLabelToDescriptionSpacingVar: '#{$spinnerVarPrefix}label-to-description-spacing';
$spinnerAnimationSpeedVar: '#{$spinnerVarPrefix}animation-speed';
$spinnerStrokeVar: '#{$spinnerVarPrefix}stroke-color';
$spinnerBgStrokeVar: '#{$spinnerVarPrefix}spinner-bg';
$spinnerValueVar: '#{$spinnerVarPrefix}value';

$fromTokens: (
  'xxs': (
    side-length: tokens.$bm-comp-spinner-size-xxs-track,
    stroke-width: tokens.$bm-comp-spinner-size-xxs-border-width,
    label-to-spinner-spacing: tokens.$bm-comp-spinner-space-xs-gap,
    label-to-description-spacing: tokens.$bm-comp-spinner-space-content-gap,
  ),
  'xs': (
    side-length: tokens.$bm-comp-spinner-size-xs-track,
    stroke-width: tokens.$bm-comp-spinner-size-xs-border-width,
    label-to-spinner-spacing: tokens.$bm-comp-spinner-space-xs-gap,
    label-to-description-spacing: tokens.$bm-comp-spinner-space-content-gap,
  ),
  'sm': (
    side-length: tokens.$bm-comp-spinner-size-sm-track,
    stroke-width: tokens.$bm-comp-spinner-size-sm-border-width,
    label-to-spinner-spacing: tokens.$bm-comp-spinner-space-sm-gap,
    label-to-description-spacing: tokens.$bm-comp-spinner-space-content-gap,
  ),
  'md': (
    side-length: tokens.$bm-comp-spinner-size-md-track,
    stroke-width: tokens.$bm-comp-spinner-size-md-border-width,
    label-to-spinner-spacing: tokens.$bm-comp-spinner-space-md-gap,
    label-to-description-spacing: tokens.$bm-comp-spinner-space-content-gap,
  ),
  'lg': (
    side-length: tokens.$bm-comp-spinner-size-lg-track,
    stroke-width: tokens.$bm-comp-spinner-size-lg-border-width,
    label-to-spinner-spacing: tokens.$bm-comp-spinner-space-lg-gap,
    label-to-description-spacing: tokens.$bm-comp-spinner-space-content-gap,
  ),
);

$sizeModifiers: (
  xs: 'xs',
  small: 'small',
  medium: 'medium',
  large: 'large',
);

$spinnerColors: (
  stroke-color: tokens.$bm-comp-spinner-color-indicator,
  spinner-bg: tokens.$bm-comp-spinner-color-track,
);

$interdeterminateSpinnerFillingAnimationTime: 3s;
$interdeterminateSpinnerRotationAnimationTime: 2 *
  $interdeterminateSpinnerFillingAnimationTime;
