// ========================================================================
// Import with conditional component generation
// Usage:
//   @use '@broxus/react-components/styles/import' with ($components: (all: true));
//   @use '@broxus/react-components/styles/import' with ($components: (skeleton: true, chart: true));
// ========================================================================

@use 'sass:map';
@use 'sass:meta';

// Forward base dependencies (always needed)
@forward 'mixins';


// ========================================================================
// Configuration
// ========================================================================

// Default components configuration
$-components: (
    all: false,

    // Components
    amount-input: true,
    chart: false,
    composed-control: true,
    content-loader: false,
    copy: true,
    descriptions: false,
    explorer-links: true,
    formatted-currency-value: false,
    formatted-token-amount: false,
    icons-set: true,
    native-scroll-area: false,
    ordering-switcher: true,
    pie-chart: false,
    pool-select: false,
    pool-tokens-badge: true,
    quotation-delta: true,
    quotation-rate: true,
    skeleton: true,
    stats: true,
    token-amount-badge: true,
    token-amount-input: true,
    token-badge: true,
    token-icon: true,
    token-select: false,
    token-selector: true,
    tokens-list: true,
    wallet-account: true,
) !default;

// External override for components configuration (e.g., from the project using the library)
$components: () !default;
$components: map.merge($-components, $components);

// Private variables for easier access
$-all: map.get($components, 'all') !default;


// ========================================================================
// Import component modules
// ========================================================================

@use 'amount-input/amount-input' as amount-input-module;
@use 'chart/chart' as chart-module;
@use 'composed-control/composed-control' as composed-control-module;
@use 'content-loader/content-loader' as content-loader-module;
@use 'copy/copy' as copy-module;
@use 'descriptions/descriptions' as descriptions-module;
@use 'explorer-links/explorer-links' as explorer-links-module;
@use 'formatted-currency-value/formatted-currency-value' as formatted-currency-value-module;
@use 'formatted-token-amount/formatted-token-amount' as formatted-token-amount-module;
@use 'icons-set/icons-set' as icons-set-module;
@use 'native-scroll-area/native-scroll-area' as native-scroll-area-module;
@use 'ordering-switcher/ordering-switcher' as ordering-switcher-module;
@use 'pie-chart/pie-chart' as pie-chart-module;
@use 'pool-select/pool-select' as pool-select-module;
@use 'pool-tokens-badge/pool-tokens-badge' as pool-tokens-badge-module;
@use 'quotation-delta/quotation-delta' as quotation-delta-module;
@use 'quotation-rate/quotation-rate' as quotation-rate-module;
@use 'skeleton/skeleton' as skeleton-module;
@use 'stats/stats' as stats-module;
@use 'token-amount-badge/token-amount-badge' as token-amount-badge-module;
@use 'token-amount-input/token-amount-input' as token-amount-input-module;
@use 'token-badge/token-badge' as token-badge-module;
@use 'token-icon/token-icon' as token-icon-module;
@use 'token-select/token-select' as token-select-module;
@use 'token-selector/token-selector' as token-selector-module;
@use 'tokens-list/tokens-list' as tokens-list-module;
@use 'wallet-account/wallet-account' as wallet-account-module;


// ========================================================================
// Conditional styles generation
// ========================================================================

@if map.get($components, 'amount-input') or $-all { @include amount-input-module.amount-input-styles; }
@if map.get($components, 'chart') or $-all { @include chart-module.chart-styles; }
@if map.get($components, 'composed-control') or $-all { @include composed-control-module.composed-control-styles; }
@if map.get($components, 'content-loader') or $-all { @include content-loader-module.content-loader-styles; }
@if map.get($components, 'copy') or $-all { @include copy-module.copy-styles; }
@if map.get($components, 'descriptions') or $-all { @include descriptions-module.descriptions-styles; }
@if map.get($components, 'explorer-links') or $-all { @include explorer-links-module.explorer-links-styles; }
@if map.get($components, 'formatted-currency-value') or $-all { @include formatted-currency-value-module.formatted-currency-value-styles; }
@if map.get($components, 'formatted-token-amount') or $-all { @include formatted-token-amount-module.formatted-token-amount-styles; }
@if map.get($components, 'icons-set') or $-all { @include icons-set-module.icons-set-styles; }
@if map.get($components, 'native-scroll-area') or $-all { @include native-scroll-area-module.native-scroll-area-styles; }
@if map.get($components, 'ordering-switcher') or $-all { @include ordering-switcher-module.ordering-switcher-styles; }
@if map.get($components, 'pie-chart') or $-all { @include pie-chart-module.pie-chart-styles; }
@if map.get($components, 'pool-select') or $-all { @include pool-select-module.pool-select-styles; }
@if map.get($components, 'pool-tokens-badge') or $-all { @include pool-tokens-badge-module.pool-tokens-badge-styles; }
@if map.get($components, 'quotation-delta') or $-all { @include quotation-delta-module.quotation-delta-styles; }
@if map.get($components, 'quotation-rate') or $-all { @include quotation-rate-module.quotation-rate-styles; }
@if map.get($components, 'skeleton') or $-all { @include skeleton-module.skeleton-styles; }
@if map.get($components, 'stats') or $-all { @include stats-module.stats-styles; }
@if map.get($components, 'token-amount-badge') or $-all { @include token-amount-badge-module.token-amount-badge-styles; }
@if map.get($components, 'token-amount-input') or $-all { @include token-amount-input-module.token-amount-input-styles; }
@if map.get($components, 'token-badge') or $-all { @include token-badge-module.token-badge-styles; }
@if map.get($components, 'token-icon') or $-all { @include token-icon-module.token-icon-styles; }
@if map.get($components, 'token-select') or $-all { @include token-select-module.token-select-styles; }
@if map.get($components, 'token-selector') or $-all { @include token-selector-module.token-selector-styles; }
@if map.get($components, 'tokens-list') or $-all { @include tokens-list-module.tokens-list-styles; }
@if map.get($components, 'wallet-account') or $-all { @include wallet-account-module.wallet-account-styles; }


// ========================================================================
// Conditional tokens generation (CSS custom properties)
// ========================================================================

// Whether to generate CSS tokens
$generate-tokens: true !default;
$tokens-selector: ':root' !default;

@if $generate-tokens {
    #{$tokens-selector} {
        @if map.get($components, 'amount-input') or $-all { @include amount-input-module.amount-input-tokens; }
        @if map.get($components, 'chart') or $-all { @include chart-module.chart-tokens; }
        @if map.get($components, 'composed-control') or $-all { @include composed-control-module.composed-control-tokens; }
        @if map.get($components, 'content-loader') or $-all { @include content-loader-module.content-loader-tokens; }
        @if map.get($components, 'copy') or $-all { @include copy-module.copy-tokens; }
        @if map.get($components, 'descriptions') or $-all { @include descriptions-module.descriptions-tokens; }
        @if map.get($components, 'explorer-links') or $-all { @include explorer-links-module.explorer-links-tokens; }
        @if map.get($components, 'formatted-currency-value') or $-all { @include formatted-currency-value-module.formatted-currency-value-tokens; }
        @if map.get($components, 'formatted-token-amount') or $-all { @include formatted-token-amount-module.formatted-token-amount-tokens; }
        @if map.get($components, 'icons-set') or $-all { @include icons-set-module.icons-set-tokens; }
        @if map.get($components, 'native-scroll-area') or $-all { @include native-scroll-area-module.native-scroll-area-tokens; }
        @if map.get($components, 'ordering-switcher') or $-all { @include ordering-switcher-module.ordering-switcher-tokens; }
        @if map.get($components, 'pie-chart') or $-all { @include pie-chart-module.pie-chart-tokens; }
        @if map.get($components, 'pool-select') or $-all { @include pool-select-module.pool-select-tokens; }
        @if map.get($components, 'pool-tokens-badge') or $-all { @include pool-tokens-badge-module.pool-tokens-badge-tokens; }
        @if map.get($components, 'quotation-delta') or $-all { @include quotation-delta-module.quotation-delta-tokens; }
        @if map.get($components, 'quotation-rate') or $-all { @include quotation-rate-module.quotation-rate-tokens; }
        @if map.get($components, 'skeleton') or $-all { @include skeleton-module.skeleton-tokens; }
        @if map.get($components, 'stats') or $-all { @include stats-module.stats-tokens; }
        @if map.get($components, 'token-amount-badge') or $-all { @include token-amount-badge-module.token-amount-badge-tokens; }
        @if map.get($components, 'token-amount-input') or $-all { @include token-amount-input-module.token-amount-input-tokens; }
        @if map.get($components, 'token-badge') or $-all { @include token-badge-module.token-badge-tokens; }
        @if map.get($components, 'token-icon') or $-all { @include token-icon-module.token-icon-tokens; }
        @if map.get($components, 'token-select') or $-all { @include token-select-module.token-select-tokens; }
        @if map.get($components, 'token-selector') or $-all { @include token-selector-module.token-selector-tokens; }
        @if map.get($components, 'tokens-list') or $-all { @include tokens-list-module.tokens-list-tokens; }
        @if map.get($components, 'wallet-account') or $-all { @include wallet-account-module.wallet-account-tokens; }
    }
}
