import 'package:flutter/material.dart';

/// Enterprise health app color system.
class AppColors {
  AppColors._();

  static const Color primary = Color(0xFF7C5CFF);
  static const Color primaryLight = Color(0xFFEDE8FF);
  static const Color primarySoft = Color(0xFFF6F3FF);
  static const Color primaryDark = Color(0xFF5B3FE8);
  static const Color blueMeasure = Color(0xFF4F7CFF);
  static const Color doctorBlue = Color(0xFF3B82F6);
  static const Color auraLavender = Color(0xFFA78BFA);
  static const Color auraIndigo = Color(0xFF818CF8);
  static const Color auraOrchid = Color(0xFFC084FC);
  static const Color auraDeepIndigo = Color(0xFF6366F1);
  static const Color mintAccent = Color(0xFF2DD4BF);
  static const Color peachAccent = Color(0xFFFFA6A6);
  static const Color roseAccent = Color(0xFFF43F5E);
  static const Color meadowAccent = Color(0xFF72F874);
  static const Color sageAccent = Color(0xFF9CD9C9);

  static const Color background = Color(0xFFFAF8FF);
  static const Color backgroundSoft = Color(0xFFFFFCFF);
  static const Color cardBackground = Color(0xFFFFFFFF);
  static const Color cardInner = Color(0xFFF7F5FF);
  static const Color pageGrey = background;
  static const Color iconBg = Color(0xFFF2EEFF);
  static const Color avatarBg = Color(0xFFF4EFFF);

  static const Color textPrimary = Color(0xFF1F2937);
  static const Color textSecondary = Color(0xFF667085);
  static const Color textHint = Color(0xFF98A2B3);
  static const Color textOnGradient = Color(0xFFFFFFFF);

  static const Color border = Color(0xFFE5E7EB);
  static const Color borderLight = Color(0xFFF1F3F8);
  static const Color divider = Color(0xFFEFF2F7);

  static const Color success = Color(0xFF16A34A);
  static const Color successLight = Color(0xFFEAF8EF);
  static const Color error = Color(0xFFEF4444);
  static const Color errorLight = Color(0xFFFEECEF);
  static const Color warning = Color(0xFFF59E0B);
  static const Color warningLight = Color(0xFFFFF7E6);
  static const Color infoLight = Color(0xFFEFF5FF);

  static const LinearGradient primaryGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFF8B5CF6), Color(0xFF7C5CFF), Color(0xFF6366F1)],
    stops: [0.0, 0.5, 1.0],
  );

  static const LinearGradient bgGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [
      Color(0xFFFFFCFF),
      Color(0xFFF9F5FF),
      Color(0xFFF5F1FF),
      Color(0xFFF2F6FF),
    ],
    stops: [0.0, 0.42, 0.74, 1.0],
  );

  static const LinearGradient drawerGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFFFFFFFF), Color(0xFFFBF7FF), Color(0xFFF0F4FF)],
    stops: [0.0, 0.52, 1.0],
  );

  static const LinearGradient surfaceGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFFFFFFFF), Color(0xFFFCFAFF)],
  );

  static const LinearGradient softGlassGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xF7FFFFFF), Color(0xECFFFFFF)],
  );

  static const LinearGradient roseVioletGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFF8B5CF6), Color(0xFFF43F5E)],
  );

  static const LinearGradient sageVioletGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFF9CD9C9), Color(0xFFAE2EF9)],
  );

  static const LinearGradient meadowVioletGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFF72F874), Color(0xFF8C6BD9)],
  );

  static const LinearGradient calmHealthGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFF9CD9C9), Color(0xFF818CF8)],
  );

  static const LinearGradient warmCareGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFFFFA6A6), Color(0xFFC084FC)],
  );

  static const LinearGradient actionOutlineGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFFC084FC), Color(0xFF818CF8), Color(0xFFC084FC), Color(0xFF818CF8)],
    stops: [0.0, 0.3, 0.6, 1.0],
  );

  static const LinearGradient doctorGradient = LinearGradient(
    begin: Alignment.topLeft,
    end: Alignment.bottomRight,
    colors: [Color(0xFF4F7CFF), Color(0xFF7C5CFF)],
  );

  static List<BoxShadow> get cardShadow => [
    BoxShadow(
      color: const Color(0xFF101828).withValues(alpha: 0.07),
      blurRadius: 22,
      offset: const Offset(0, 10),
    ),
  ];

  static List<BoxShadow> get cardShadowLight => [
    BoxShadow(
      color: const Color(0xFF101828).withValues(alpha: 0.045),
      blurRadius: 14,
      offset: const Offset(0, 6),
    ),
  ];

  static List<BoxShadow> get buttonShadow => [
    BoxShadow(
      color: primary.withValues(alpha: 0.22),
      blurRadius: 16,
      offset: const Offset(0, 8),
    ),
  ];

  static List<BoxShadow> get fabShadow => buttonShadow;

  static Color get iconColor => primary;
  static LinearGradient get purpleBlueGradient => primaryGradient;
  static Color get primaryPurple => primary;
  static Color get primaryBlue => blueMeasure;
  static Color get backgroundSecondary => background;
  static LinearGradient get successButtonGradient => primaryGradient;
  static LinearGradient get lightGradient => bgGradient;
}
