@use '../../../../utils/map' as *;
@use '../../../../typography/functions' as *;

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

// stylelint-disable max-line-length

/// Generates a light checkbox schema.
/// @type {Map}
/// @prop {Map} tick-color [color: ('gray', 50)] - The checked mark color.
/// @prop {Map} label-color [color: ('gray', 900)]- The text color used for the label text.
/// @prop {Map} label-color-hover [color: ('gray', 900)]- The text color used for the label text on hover.
/// @prop {Color} empty-fill-color [transparent] - The unchecked fill color.
/// @prop {Map} fill-color [color: ('primary', 500)] - The checked border and fill colors.
/// @prop {Color} focus-outline-color-focused [transparent] - The focus outlined color for focused state.
/// @prop {Color} focus-outline-color-error [transparent] - The focus outlined color for focused invalid state.
/// @prop {Map} disabled-color [color: ('gray', 400)] - The disabled border and fill colors.
/// @prop {Map} disabled-tick-color [color: ('gray', 50)] - The checked mark color in disabled state.
/// @prop {Map} disabled-indeterminate-color [color: ('secondary', 100)] - The disabled border and fill colors in indeterminate state.
/// @prop {Map} disabled-color-label [color: ('gray', 500)] - The disabled color of the label.
/// @prop {Map} error-color [color: ('error', 500)] - The border and fill colors in invalid state.
/// @prop {List} border-radius [(rem(2px), rem(0), rem(10px))] - The border radius used for checkbox.
/// @prop {List} border-radius-ripple [(rem(24px), rem(0), rem(24px))] - The border radius used for checkbox ripple.
/// @prop {Map} typography [label: (value: 'body-2')] - The typography styles used for the component.
$light-checkbox: (
    tick-color: (
        color: (
            'gray',
            50,
        ),
    ),
    label-color: (
        color: (
            'gray',
            900,
        ),
    ),
    label-color-hover: (
        color: (
            'gray',
            900,
        ),
    ),
    empty-fill-color: transparent,
    fill-color: (
        color: (
            'primary',
            500,
        ),
    ),
    focus-outline-color-focused: transparent,
    focus-outline-color-error: transparent,
    disabled-color: (
        color: (
            'gray',
            400,
        ),
    ),
    disabled-tick-color: (
        color: (
            'gray',
            50,
        ),
    ),
    disabled-indeterminate-color: (
        color: (
            'secondary',
            100,
        ),
    ),
    disabled-color-label: (
        color: (
            'gray',
            500,
        ),
    ),
    error-color: (
        color: (
            'error',
            500,
        ),
    ),
    border-radius: (
        border-radius: (
            rem(2px),
            rem(0),
            rem(10px),
        ),
    ),
    border-radius-ripple: (
        border-radius: (
            rem(24px),
            rem(0),
            rem(24px),
        ),
    ),

    typography: (
        label: (
            value: 'body-2',
        ),
    ),
);

/// Generates a material checkbox schema.
/// @type {Map}
/// @prop {Map} empty-color [color: ('gray', 600)] - The unchecked border color.
/// @prop {Map} empty-color-hover [color: ('gray', 600)] - The unchecked border color on hover.
/// @prop {Map} tick-color-hover [color: ('gray', 50)] - The checked mark color on hover.
/// @prop {Map} fill-color [color: ('secondary', 500)] - The checked border and fill colors.
/// @prop {Map} fill-color-hover [color: ('secondary', 500)] - The checked border and fill colors on hover.
/// @prop {Color} focus-outline-color [transparent] - The focus outlined color.
/// @prop {Map} focus-border-color [color: ('gray', 600)] - The focus border color.
/// @prop {Map} error-color-hover [color: ('error', 500)] - The border and fill colors in invalid state on hover.
/// @prop {Map} typography [label: (value: 'subtitle-1')] - The typography styles used for the component.
/// @requires {Map} $light-checkbox
$material-checkbox: extend(
    $light-checkbox,
    (
        empty-color: (
            color: (
                'gray',
                600,
            ),
        ),

        empty-color-hover: (
            color: (
                'gray',
                600,
            ),
        ),

        tick-color-hover: (
            color: (
                'gray',
                50,
            ),
        ),

        fill-color: (
            color: (
                'secondary',
                500,
            ),
        ),

        fill-color-hover: (
            color: (
                'secondary',
                500,
            ),
        ),

        focus-outline-color: transparent,

        focus-border-color: (
            color: (
                'gray',
                600,
            ),
        ),

        error-color-hover: (
            color: (
                'error',
                500,
            ),
        ),

        typography: (
            label: (
                value: 'subtitle-1',
            ),
        ),

        _meta: (
            theme: 'material',
            variant: 'light',
        ),
    )
);

/// Generates a fluent checkbox schema.
/// @type {Map}
/// @prop {Map} tick-color-hover [color: ('gray', 700)] - The checked mark color on hover when the control in unchecked.
/// @prop {Map} empty-color [color: ('gray', 900)] - The unchecked border color.
/// @prop {Map} empty-color-hover [color: ('gray', 900)] - The unchecked border color on hover.
/// @prop {Map} fill-color-hover [color: ('primary', 800)] - The checked border and fill colors on hover.
/// @prop {Map} focus-outline-color [color: ('gray', 700)] - The focus outlined color.
/// @prop {Map} focus-border-color [color: ('gray', 900)] - The focus border color.
/// @prop {Map} error-color-hover [color: ('error', 700)] - The border and fill colors in invalid state on hover.
/// @prop {List} border-radius-ripple [(rem(2px), rem(0), rem(24px))] - The border radius used for checkbox ripple.
/// @requires {Map} $light-checkbox
$fluent-checkbox: extend(
    $light-checkbox,
    (
        tick-color-hover: (
            color: (
                'gray',
                700,
            ),
        ),
        focus-outline-color: (
            color: (
                'gray',
                700,
            ),
        ),
        focus-border-color: (
            color: (
                'gray',
                900,
            ),
        ),
        empty-color: (
            color: (
                'gray',
                900,
            ),
        ),
        empty-color-hover: (
            color: (
                'gray',
                900,
            ),
        ),
        fill-color-hover: (
            color: (
                'primary',
                800,
            ),
        ),
        error-color-hover: (
            color: (
                'error',
                700,
            ),
        ),
        border-radius-ripple: (
            border-radius: (
                rem(2px),
                rem(0),
                rem(24px),
            ),
        ),
        _meta: (
            theme: 'fluent',
            variant: 'light',
        ),
    )
);

/// Generates a bootstrap checkbox schema.
/// @type {Map}
/// @prop {Map} tick-color [contrast-color: ('primary', 900)] - The checked mark color.
/// @prop {Map} tick-color-hover [contrast-color: ('primary', 900)] - The checked mark color on hover.
/// @prop {Map} empty-color [color: ('gray', 400)] - The unchecked border color.
/// @prop {Map} empty-color-hover [color: ('gray', 500)] - The unchecked border color on hover.
/// @prop {Map} empty-fill-color [contrast-color: ('gray', 900)] - The unchecked fill color.
/// @prop {Map} fill-color-hover [color: ('primary', 600)] - The checked border and fill colors on hover.
/// @prop {Map} disabled-color [color: ('gray', 300)] - The disabled border color.
/// @prop {Map} disabled-tick-color [contrast-color: ('primary', 900)] - The checked mark color in disabled state.
/// @prop {Map} disabled-indeterminate-color [color: ('primary', 200)] - The disabled border and fill colors.
/// @prop {Map} focus-border-color [color: ('primary', 200)] - The focus border color.
/// @prop {Map} focus-outline-color [color: ('primary', 200, 0.5)] - The focus outlined color.
/// @prop {Map} focus-outline-color-error [color: ('error', 200, 0.5)] - The focus outlined color for focused invalid state.
/// @prop {Map} error-color-hover [color: ('error', 600)] - The focus outlined color in invalid state.
/// @prop {List} border-radius [(rem(4px), rem(0), rem(10px))] - The border radius used for checkbox.
/// @prop {List} border-radius-ripple [(rem(4px), rem(0), rem(24px))] - The border radius used for checkbox ripple.
/// @prop {Map} typography [label: (value: 'body-1')] - The typography styles used for the component.
/// @requires {Map} $light-checkbox
$bootstrap-checkbox: extend(
    $light-checkbox,
    (
        tick-color: (
            contrast-color: (
                'primary',
                900,
            ),
        ),
        tick-color-hover: (
            contrast-color: (
                'primary',
                900,
            ),
        ),
        empty-color: (
            color: (
                'gray',
                400,
            ),
        ),
        empty-color-hover: (
            color: (
                'gray',
                500,
            ),
        ),
        empty-fill-color: (
            contrast-color: (
                'gray',
                900,
            ),
        ),
        focus-border-color: (
            color: (
                'primary',
                200,
            ),
        ),
        focus-outline-color: (
            color: (
                'primary',
                200,
                0.5,
            ),
        ),
        focus-outline-color-error: (
            color: (
                'error',
                200,
                0.5,
            ),
        ),
        fill-color-hover: (
            color: (
                'primary',
                600,
            ),
        ),
        disabled-color: (
            color: (
                'gray',
                300,
            ),
        ),
        disabled-tick-color: (
            contrast-color: (
                'primary',
                900,
            ),
        ),
        disabled-indeterminate-color: (
            color: (
                'primary',
                200,
            ),
        ),
        error-color-hover: (
            color: (
                'error',
                600,
            ),
        ),
        border-radius: (
            border-radius: (
                rem(4px),
                rem(0),
                rem(10px),
            ),
        ),
        border-radius-ripple: (
            border-radius: (
                rem(4px),
                rem(0),
                rem(24px),
            ),
        ),
        typography: (
            label: (
                value: 'body-1',
            ),
        ),
        _meta: (
            theme: 'bootstrap',
            variant: 'light',
        ),
    )
);

/// Generates an indigo checkbox schema.
/// @type {Map}
/// @prop {Color} tick-color [contrast-color: ('primary', 500)] - The checked mark color.
/// @prop {Color} tick-color-hover [contrast-color: ('primary', 500)] - The checked mark color on hover.
/// @prop {Map} label-color [color: ('gray', 800)]- The text color used for the label text.
/// @prop {Map} fill-color-hover [color: ('primary', 400)] - The checked border and fill colors on hover.
/// @prop {Map} empty-color [color: ('gray', 500)] - The unchecked border color.
/// @prop {Map} empty-color-hover [color: ('gray', 600)] - The unchecked border color on hover.
/// @prop {Map} disabled-color [color: ('gray', 900, .15)] - The disabled border and fill colors.
/// @prop {Map} disabled-tick-color [contrast-color: ('primary', 500, .4)] - The checked mark color in disabled state.
/// @prop {Map} disabled-indeterminate-color [color: ('primary', 400, .5)] - The disabled border and fill colors in checked/indeterminate state.
/// @prop {Map} disabled-color-label [color: ('gray', 900, .2)] - The disabled label color.
/// @prop {Map} focus-outline-color [color: ('gray', 900, .15)] - The focus outlined color.
/// @prop {Map} focus-outline-color-focused [color: ('primary', 400, .5)] - The focus outlined color for focused state.
/// @prop {Map} focus-border-color [color: ('gray', 500)] - The focus border color.
/// @prop {Map} focus-outline-color-error [color: ('error', 400, 0.5)] - The focus outlined color for focused invalid state.
/// @prop {Map} error-color-hover [color: ('error', 400)] - The focus outlined color in invalid state.
/// @prop {List} border-radius [(rem(3px), rem(0), rem(10px))] - The border radius used for checkbox.
/// @prop {List} border-radius-ripple [(rem(3px), rem(0), rem(24px))] - The border radius used for checkbox ripple.
/// @requires {Map} $light-checkbox
$indigo-checkbox: extend(
    $light-checkbox,
    (
        label-color: (
            color: (
                'gray',
                800,
            ),
        ),
        focus-outline-color: (
            color: (
                'gray',
                900,
                0.15,
            ),
        ),
        focus-outline-color-focused: (
            color: (
                'primary',
                400,
                0.5,
            ),
        ),
        focus-border-color: (
            color: (
                'gray',
                500,
            ),
        ),
        focus-outline-color-error: (
            color: (
                'error',
                400,
                0.5,
            ),
        ),
        tick-color: (
            contrast-color: (
                'primary',
                500,
            ),
        ),
        tick-color-hover: (
            contrast-color: (
                'primary',
                500,
            ),
        ),
        fill-color-hover: (
            color: (
                'primary',
                400,
            ),
        ),
        empty-color: (
            color: (
                'gray',
                500,
            ),
        ),
        empty-color-hover: (
            color: (
                'gray',
                600,
            ),
        ),
        disabled-color: (
            color: (
                'gray',
                900,
                0.15,
            ),
        ),
        disabled-tick-color: (
            contrast-color: (
                'primary',
                500,
                0.4,
            ),
        ),
        disabled-color-label: (
            color: (
                'gray',
                900,
                0.2,
            ),
        ),
        disabled-indeterminate-color: (
            color: (
                'primary',
                400,
                0.5,
            ),
        ),
        error-color-hover: (
            color: (
                'error',
                400,
            ),
        ),
        border-radius: (
            border-radius: (
                rem(3px),
                rem(0),
                rem(10px),
            ),
        ),
        border-radius-ripple: (
            border-radius: (
                rem(3px),
                rem(0),
                rem(24px),
            ),
        ),
        _meta: (
            theme: 'indigo',
            variant: 'light',
        ),
    )
);
