@use 'sass:map';

@use './resets.scss' as *;
@use './global/breakpoints.scss' as *;
@use './global/scrollbar.scss' as *;
@use './global/theme.scss' as *;
@use './global/tooltip.scss' as *;
@use './global/utility.scss' as *;

$config: (
    includeResets: true,
    includeUtilities: true,
    includeTooltip: true,
    includeScrollbarStyles: true,
    includeBreakpoints: true
);

body {
    --w-sm-radius: 2px;
    --w-md-radius: 5px;
    --w-lg-radius: 10px;
    --w-xl-radius: 15px;
}

@function config($key) {
    @return map.get($config, $key);
}

@mixin setup($customConfig: ()) {
    $config: map.merge($config, $customConfig) !global;
    $wcagLevel: config('wcagLevel') or AA;

    @if (config('includeResets')) {
        @include resets(config('fontRegular'), config('fontBold'));
    }

    @if (config('includeUtilities')) {
        @include utility();
    }

    @if (config('includeScrollbarStyles')) {
        @include scrollbar();
    }

    @if (config('includeTooltip')) {
        @include tooltip();
    }

    @if (config('includeBreakpoints')) {
        @include breakpoints();
    }

    @if (config('theme')) {
        @include theme(config('theme'), ':root', $wcagLevel);
    }

    @if (config('themes')) {
        $customThemes: config('customThemes') or ();

        @each $theme, $selector in config('themes') {
            @include theme($theme, $selector, $wcagLevel, $customThemes);
        }
    } @else if (not config('theme')) {
        @include theme('dark', ':root', $wcagLevel);
    }
}
