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

@mixin _load-styles($all-options, $namespace, $name: $namespace) {
  $options: map.get($all-options, $name);

  @if $options != false {
    @if $options != null and meta.type-of($options) != 'map' {
      @error 'Invalid options of #{$name}. Only accept false, null or map';
    }

    $url: #{'@mezzanine-ui/core/'}#{$namespace}#{'/'}#{$name}#{'-styles'};

    @include meta.load-css($url, $options);
  }
}

@mixin styles($options: ()) {
  // Foundation
  @include _load-styles($options, layout);

  // General
  @include _load-styles($options, typography);
  @include _load-styles($options, icon);
  @include _load-styles($options, button);
  @include _load-styles($options, cropper);

  // Internal
  @include _load-styles($options, scrollbar);
  @include _load-styles($options, clear-actions);
  @include _load-styles($options, overflow-tooltip);

  // Utility
  @include _load-styles($options, backdrop);
  @include _load-styles($options, tooltip);
  @include _load-styles($options, calendar);
  @include _load-styles($options, time-panel);
  @include _load-styles($options, separator);

  // Data Entry Common
  @include _load-styles($options, _internal/input-check, input-check);
  @include _load-styles($options, _internal/input-trigger-popper, input-trigger-popper);
  @include _load-styles($options, text-field);
  @include _load-styles($options, input, input-spinner-button);
  @include _load-styles($options, input, input-action-button);
  @include _load-styles($options, input, input-select-button);
  @include _load-styles($options, input, input-password-strength-indicator);

  // Navigation
  @include _load-styles($options, breadcrumb);
  @include _load-styles($options, tab);
  @include _load-styles($options, pagination);
  @include _load-styles($options, drawer);
  @include _load-styles($options, navigation);
  @include _load-styles($options, page-footer);
  @include _load-styles($options, page-header);
  @include _load-styles($options, content-header);
  @include _load-styles($options, stepper);

  // Data Display
  @include _load-styles($options, badge);
  @include _load-styles($options, card);
  @include _load-styles($options, description);
  @include _load-styles($options, empty);
  @include _load-styles($options, tag);
  @include _load-styles($options, accordion);
  @include _load-styles($options, table);
  @include _load-styles($options, inline-message);
  @include _load-styles($options, section);

  // Data Entry
  @include _load-styles($options, checkbox);
  @include _load-styles($options, input);
  @include _load-styles($options, radio);
  @include _load-styles($options, select);
  @include _load-styles($options, autocomplete);
  @include _load-styles($options, selection-card);
  @include _load-styles($options, textarea);
  @include _load-styles($options, toggle);
  @include _load-styles($options, upload, upload);
  @include _load-styles($options, upload, uploader);
  @include _load-styles($options, upload, upload-item);
  @include _load-styles($options, upload, upload-picture-card);
  @include _load-styles($options, picker);
  @include _load-styles($options, multiple-date-picker);
  @include _load-styles($options, date-time-range-picker);
  @include _load-styles($options, slider);
  @include _load-styles($options, dropdown);
  @include _load-styles($options, cascader);

  // Data Entry Form
  @include _load-styles($options, form, form-field);
  @include _load-styles($options, form, form-group);
  @include _load-styles($options, filter-area);

  // Feedback
  @include _load-styles($options, alert-banner);
  @include _load-styles($options, message);
  @include _load-styles($options, modal);
  @include _load-styles($options, notification-center);
  @include _load-styles($options, progress);
  @include _load-styles($options, spin);
  @include _load-styles($options, skeleton);
  @include _load-styles($options, result-state);

  // Others
  @include _load-styles($options, anchor);
  @include _load-styles($options, portal);
  @include _load-styles($options, floating-button);
}
