/// Tokens d'ombres pour le design system
/// Définit les ombres standardisées de l'application
library shadow_tokens;

import 'package:flutter/material.dart';
import 'color_tokens.dart';

/// Tokens d'ombres standardisés
/// 
/// Utilisation cohérente des ombres dans toute l'application.
/// Basé sur les principes de Material Design 3.
class ShadowTokens {
  ShadowTokens._();

  // ═══════════════════════════════════════════════════════════════════════════
  // OMBRES STANDARDS
  // ═══════════════════════════════════════════════════════════════════════════

  /// Ombre minimale - Pour éléments subtils
  static final List<BoxShadow> xs = [
    const BoxShadow(
      color: ColorTokens.shadow,
      blurRadius: 4,
      offset: Offset(0, 1),
    ),
  ];

  /// Ombre petite - Pour cards et boutons
  static final List<BoxShadow> sm = [
    const BoxShadow(
      color: ColorTokens.shadow,
      blurRadius: 8,
      offset: Offset(0, 2),
    ),
  ];

  /// Ombre moyenne - Pour cards importantes
  static final List<BoxShadow> md = [
    const BoxShadow(
      color: ColorTokens.shadow,
      blurRadius: 12,
      offset: Offset(0, 4),
    ),
  ];

  /// Ombre large - Pour modals et dialogs
  static final List<BoxShadow> lg = [
    const BoxShadow(
      color: ColorTokens.shadowMedium,
      blurRadius: 16,
      offset: Offset(0, 6),
    ),
  ];

  /// Ombre très large - Pour éléments flottants
  static final List<BoxShadow> xl = [
    const BoxShadow(
      color: ColorTokens.shadowMedium,
      blurRadius: 24,
      offset: Offset(0, 8),
    ),
  ];

  /// Ombre extra large - Pour éléments héroïques
  static final List<BoxShadow> xxl = [
    const BoxShadow(
      color: ColorTokens.shadowHigh,
      blurRadius: 32,
      offset: Offset(0, 12),
      spreadRadius: -4,
    ),
  ];

  // ═══════════════════════════════════════════════════════════════════════════
  // OMBRES COLORÉES
  // ═══════════════════════════════════════════════════════════════════════════

  /// Ombre primaire - Pour éléments avec couleur primaire
  static final List<BoxShadow> primary = [
    BoxShadow(
      color: ColorTokens.primary.withOpacity(0.15),
      blurRadius: 16,
      offset: const Offset(0, 4),
    ),
  ];

  /// Ombre secondaire - Pour éléments avec couleur secondaire
  static final List<BoxShadow> secondary = [
    BoxShadow(
      color: ColorTokens.secondary.withOpacity(0.15),
      blurRadius: 16,
      offset: const Offset(0, 4),
    ),
  ];

  /// Ombre success - Pour éléments de succès
  static final List<BoxShadow> success = [
    BoxShadow(
      color: ColorTokens.success.withOpacity(0.15),
      blurRadius: 16,
      offset: const Offset(0, 4),
    ),
  ];

  /// Ombre error - Pour éléments d'erreur
  static final List<BoxShadow> error = [
    BoxShadow(
      color: ColorTokens.error.withOpacity(0.15),
      blurRadius: 16,
      offset: const Offset(0, 4),
    ),
  ];

  /// Ombre warning - Pour éléments d'avertissement
  static final List<BoxShadow> warning = [
    BoxShadow(
      color: ColorTokens.warning.withOpacity(0.15),
      blurRadius: 16,
      offset: const Offset(0, 4),
    ),
  ];

  // ═══════════════════════════════════════════════════════════════════════════
  // OMBRES SPÉCIALES
  // ═══════════════════════════════════════════════════════════════════════════

  /// Ombre interne - Pour effets enfoncés
  static final List<BoxShadow> inner = [
    const BoxShadow(
      color: ColorTokens.shadow,
      blurRadius: 4,
      offset: Offset(0, 2),
      spreadRadius: -2,
    ),
  ];

  /// Ombre diffuse - Pour glassmorphism
  static final List<BoxShadow> diffuse = [
    BoxShadow(
      color: ColorTokens.shadow.withOpacity(0.05),
      blurRadius: 20,
      offset: const Offset(0, 4),
      spreadRadius: 2,
    ),
  ];

  /// Pas d'ombre
  static const List<BoxShadow> none = [];
}

