// ===========================================
// EVA CSS - Configuration Module
// ===========================================
// This module centralizes all configuration variables
// All other modules @use this file to access config
// ===========================================

@use "sass:list";
@use "sass:map";
@use "sass:meta";

// ===========================================
// SIZE CONFIGURATION
// ===========================================

$sizes: 4, 8, 12, 16, 24, 32, 48, 64, 96, 128 !default;
$font-sizes: 12, 14, 16, 18, 20, 24, 32, 48 !default;

// ===========================================
// BUILD FLAGS
// ===========================================

$px-rem-suffix: false !default;   // Add static px/rem values for debugging
$build-class: true !default;      // Generate utility classes
$build-color-classes: true !default; // Generate color classes
$custom-class: false !default;     // Enable custom class filtering
$name-by-size: true !default;      // Use size values in variable names
$debug: false !default;            // Show class generation summary

// ===========================================
// CUSTOM CLASS CONFIGURATION
// ===========================================
// Used when $custom-class is true to filter which classes are generated
// Example: (w: (50, 100), px: (24), g: (24, 50))
$class-config: () !default;

// ===========================================
// DERIVED CONFIGURATION
// ===========================================

$setters-type: "__", "_", "", "-", "-px", "-rem";

$sizing-class: "__", "_", "", "-";
@if $px-rem-suffix {
  $sizing-class: list.append($sizing-class, "-px");
  $sizing-class: list.append($sizing-class, "-rem");
}

$font-size-class: "__", "_", "";
@if $px-rem-suffix {
  $font-size-class: list.append($font-size-class, "-px");
  $font-size-class: list.append($font-size-class, "-rem");
}

// ===========================================
// PROPERTY MAPS
// ===========================================

$properties: (
  w: width,
  mw: max-width,
  h: height,
  p: padding,
  px: padding-inline,
  pr: padding-right,
  py: padding-block,
  br: border-radius,
  mb: margin-bottom,
  mr: margin-right,
  ml: margin-left,
  mt: margin-top,
  pt: padding-top,
  pb: padding-bottom,
  g: gap,
  gap: gap,
);

$font-properties: (
  fs: font-size,
);

// ===========================================
// CONFIGURATION VALIDATION
// ===========================================

// Validate that required base sizes exist
@if not list.index($sizes, 16) {
  @error "EVA CSS: Size 16 is required as a base size. Please add 16 to your $sizes configuration.";
}

// Validate that sizes list is not empty
@if list.length($sizes) == 0 {
  @error "EVA CSS: $sizes cannot be empty. Please provide at least one size value.";
}

// Validate that font-sizes list is not empty
@if list.length($font-sizes) == 0 {
  @error "EVA CSS: $font-sizes cannot be empty. Please provide at least one font size value.";
}

// Validate custom-class configuration
@if $custom-class and meta.type-of($class-config) != "map" {
  @error "EVA CSS: When $custom-class is true, $class-config must be a map. Example: (w: (50, 100), px: (24))";
}

// Validate that class-config properties exist in $properties
@if $custom-class and list.length(map.keys($class-config)) > 0 {
  @each $key in map.keys($class-config) {
    @if not map.has-key($properties, $key) {
      @error "EVA CSS: Unknown property '#{$key}' in $class-config. Available properties: #{map.keys($properties)}";
    }

    // Validate that sizes in class-config exist in $sizes
    $allowed-sizes: map.get($class-config, $key);
    @if meta.type-of($allowed-sizes) != "list" {
      @error "EVA CSS: Value for '#{$key}' in $class-config must be a list of sizes. Example: (24, 50, 100)";
    }

    @each $size in $allowed-sizes {
      @if not list.index($sizes, $size) {
        @error "EVA CSS: Size #{$size} in $class-config for property '#{$key}' is not in $sizes list. Available sizes: #{$sizes}";
      }
    }
  }
}
