
/// Svrnty Size System
/// Standard sizing constants for icons, buttons, containers, and other components
class AppSizes {
  // Prevent instantiation
  AppSizes._();

  // ============================================
  // ICON SIZES
  // ============================================

  /// Extra small icon (16px)
  static const double iconXs = 16.0;

  /// Small icon (20px)
  static const double iconSm = 20.0;

  /// Standard icon size (24px)
  static const double iconMd = 24.0;

  /// Large icon size (32px)
  static const double iconLg = 32.0;

  /// Extra large icon (40px)
  static const double iconXl = 40.0;

  /// Huge icon (48px)
  static const double iconXxl = 48.0;

  /// Extra huge icon (56px)
  static const double iconXxxl = 56.0;

  // ============================================
  // BUTTON SIZES
  // ============================================

  /// Small button height (32px)
  static const double buttonHeightSm = 32.0;

  /// Medium button height (40px) - Default
  static const double buttonHeightMd = 40.0;

  /// Large button height (48px)
  static const double buttonHeightLg = 48.0;

  /// Extra large button height (56px)
  static const double buttonHeightXl = 56.0;

  // ============================================
  // INPUT FIELD SIZES
  // ============================================

  /// Input field height
  static const double inputHeight = 56.0;

  /// Compact input field height (no vertical padding)
  static const double inputHeightCompact = 40.0;

  /// Input field min width
  static const double inputMinWidth = 48.0;

  // ============================================
  // CONTAINER & LAYOUT SIZES
  // ============================================

  /// Standard card minimum height
  static const double cardMinHeight = 80.0;

  /// Standard dialog max width (mobile)
  static const double dialogMaxWidthMobile = 280.0;

  /// Standard dialog max width (tablet/desktop)
  static const double dialogMaxWidthDesktop = 560.0;

  /// Maximum content width for centered layouts
  static const double maxContentWidth = 1200.0;

  /// Compact content width (forms, focused layouts)
  static const double compactContentWidth = 600.0;

  /// Standard container max width
  static const double containerMaxWidth = 900.0;

  // ============================================
  // APPBAR & HEADER SIZES
  // ============================================

  /// Standard app bar height
  static const double appBarHeight = 56.0;

  /// Large app bar height
  static const double appBarHeightLarge = 72.0;

  /// Compact app bar height
  static const double appBarHeightCompact = 48.0;

  // ============================================
  // BOTTOM SHEET SIZES
  // ============================================

  /// Bottom sheet max width
  static const double bottomSheetMaxWidth = 540.0;

  /// Bottom sheet default height (auto)
  static const double bottomSheetHeightAuto = 0.0;

  /// Bottom sheet half screen height
  static const double bottomSheetHeightHalf = 0.5;

  /// Bottom sheet 3/4 screen height
  static const double bottomSheetHeight3Quarter = 0.75;

  // ============================================
  // ELEVATION & Z-INDEX
  // ============================================

  /// Standard z-index for floating elements
  static const int zIndexFloating = 100;

  /// Z-index for modals/dialogs
  static const int zIndexModal = 50;

  /// Z-index for tooltips
  static const int zIndexTooltip = 150;

  // ============================================
  // DIVIDER & LINE SIZES
  // ============================================

  /// Divider thickness
  static const double dividerThickness = 1.0;

  /// Thin divider thickness (0.5px)
  static const double dividerThicknessThin = 0.5;

  /// Thick divider thickness (2px)
  static const double dividerThicknessThick = 2.0;

  /// Horizontal divider height
  static const double dividerHeightHorizontal = 1.0;

  /// Vertical divider width
  static const double dividerWidthVertical = 1.0;

  // ============================================
  // PROGRESS INDICATOR SIZES
  // ============================================

  /// Progress indicator thickness
  static const double progressIndicatorThickness = 4.0;

  /// Circular progress indicator size
  static const double circularProgressSize = 48.0;

  /// Linear progress indicator height (thin)
  static const double linearProgressHeightThin = 2.0;

  /// Linear progress indicator height (standard)
  static const double linearProgressHeightStandard = 4.0;

  /// Linear progress indicator height (thick)
  static const double linearProgressHeightThick = 8.0;

  // ============================================
  // CHIP & BADGE SIZES
  // ============================================

  /// Chip height
  static const double chipHeight = 32.0;

  /// Small chip height
  static const double chipHeightSm = 24.0;

  /// Badge size (for counter badges)
  static const double badgeSize = 24.0;

  /// Badge size (small)
  static const double badgeSizeSm = 16.0;

  // ============================================
  // AVATAR SIZES
  // ============================================

  /// Small avatar size
  static const double avatarSizeSm = 32.0;

  /// Medium avatar size
  static const double avatarSizeMd = 48.0;

  /// Large avatar size
  static const double avatarSizeLg = 64.0;

  /// Extra large avatar size
  static const double avatarSizeXl = 80.0;

  // ============================================
  // RESPONSIVE SIZING
  // ============================================

  /// Minimum tap target size (Material guidelines - 48px)
  static const double minTapTarget = 48.0;

  /// Minimum tap target size for desktop (36px)
  static const double minTapTargetDesktop = 36.0;

  /// Standard element spacing
  static const double elementSpacing = 8.0;

  /// Large element spacing
  static const double elementSpacingLarge = 16.0;

  // ============================================
  // UTILITY METHODS
  // ============================================

  /// Get responsive button height based on device type
  static double getButtonHeight(bool isCompact) {
    return isCompact ? buttonHeightMd : buttonHeightLg;
  }

  /// Get responsive dialog max width based on screen width
  static double getDialogMaxWidth(double screenWidth) {
    return screenWidth < 600 ? dialogMaxWidthMobile : dialogMaxWidthDesktop;
  }

  /// Get responsive icon size
  static double getIconSize({
    required bool isCompact,
    required bool isLarge,
  }) {
    if (isLarge) return iconLg;
    if (isCompact) return iconSm;
    return iconMd;
  }
}
