import 'package:flutter/widgets.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:lucide_icons/lucide_icons.dart';

/// The primary icon library used by the design system.
/// This allows for easier swapping of icon libraries in the future.
typedef _IconLib = LucideIcons;

/// The secondary icon library used by the design system.
/// This allows for easier swapping of icon libraries in the future.
typedef _IconLib2 = FontAwesomeIcons;

/// Static definitions of icons for the UI design system.
/// This class wraps the primary icon library to provide a consistent interface.
///
/// example:
/// ```dart
/// Icon(UiIcons.home)
/// ```
class UiIcons {
  UiIcons._();

  // --- Navigation ---

  /// Home icon
  static const IconData home = _IconLib.home;

  /// Calendar icon for shifts or schedules
  static const IconData calendar = _IconLib.calendar;

  /// Briefcase icon for jobs
  static const IconData briefcase = _IconLib.briefcase;

  /// User icon for profile
  static const IconData user = _IconLib.user;

  /// Users icon for groups or staff
  static const IconData users = _IconLib.users;

  /// Settings icon
  static const IconData settings = _IconLib.settings;

  // --- Actions ---

  /// Search icon
  static const IconData search = _IconLib.search;

  /// Filter icon
  static const IconData filter = _IconLib.filter;

  /// Plus/Add icon
  static const IconData add = _IconLib.plus;

  /// Minus icon
  static const IconData minus = _IconLib.minus;

  /// Edit icon
  static const IconData edit = _IconLib.edit2;

  /// Delete/Trash icon
  static const IconData delete = _IconLib.trash2;

  /// Checkmark icon
  static const IconData check = _IconLib.check;

  /// X/Cancel icon
  static const IconData close = _IconLib.x;

  /// Arrow right icon
  static const IconData arrowRight = _IconLib.arrowRight;

  /// Arrow left icon
  static const IconData arrowLeft = _IconLib.arrowLeft;

  /// Swap/Transfer icon
  static const IconData swap = _IconLib.arrowLeftRight;

  /// Chevron right icon
  static const IconData chevronRight = _IconLib.chevronRight;

  /// Chevron left icon
  static const IconData chevronLeft = _IconLib.chevronLeft;

  /// Chevron down icon
  static const IconData chevronDown = _IconLib.chevronDown;

  /// Chevron up icon
  static const IconData chevronUp = _IconLib.chevronUp;

  // --- Status & Feedback ---

  /// Info icon
  static const IconData info = _IconLib.info;

  /// Help/Circle icon
  static const IconData help = _IconLib.helpCircle;

  /// Alert/Triangle icon for warnings
  static const IconData warning = _IconLib.alertTriangle;

  /// Alert/Circle icon for errors
  static const IconData error = _IconLib.alertCircle;

  /// Success/Check circle icon
  static const IconData success = _IconLib.checkCircle2;

  // --- Miscellaneous ---

  /// Clock icon
  static const IconData clock = _IconLib.clock;

  /// Log in icon
  static const IconData logIn = _IconLib.logIn;

  /// Break icon (Coffee)
  static const IconData breakIcon = _IconLib.coffee;

  /// Map pin icon for locations
  static const IconData mapPin = _IconLib.mapPin;

  /// Dollar sign icon for payments/earnings
  static const IconData dollar = _IconLib.dollarSign;

  /// Wallet icon
  static const IconData wallet = _IconLib.wallet;

  /// Credit card icon
  static const IconData creditCard = _IconLib.creditCard;

  /// Bell icon for notifications
  static const IconData bell = _IconLib.bell;

  /// Log out icon
  static const IconData logOut = _IconLib.logOut;

  /// File/Document icon
  static const IconData file = _IconLib.fileText;

  /// Lock icon
  static const IconData lock = _IconLib.lock;

  /// Shield check icon for compliance/security
  static const IconData shield = _IconLib.shieldCheck;

  /// Sparkles icon for features or AI
  static const IconData sparkles = _IconLib.sparkles;

  /// Navigation/Compass icon
  static const IconData navigation = _IconLib.navigation;

  /// Star icon for ratings
  static const IconData star = _IconLib.star;

  /// Camera icon for photo upload
  static const IconData camera = _IconLib.camera;

  /// Mail icon
  static const IconData mail = _IconLib.mail;

  /// Eye icon for visibility
  static const IconData eye = _IconLib.eye;

  /// Eye off icon for hidden visibility
  static const IconData eyeOff = _IconLib.eyeOff;

  /// Phone icon for calls
  static const IconData phone = _IconLib.phone;

  /// Message circle icon for chat
  static const IconData messageCircle = _IconLib.messageCircle;

  /// Building icon for companies
  static const IconData building = _IconLib.building2;

  /// Zap icon for rapid actions
  static const IconData zap = _IconLib.zap;

  /// Grip vertical icon for reordering
  static const IconData gripVertical = _IconLib.gripVertical;

  /// Trending down icon for insights
  static const IconData trendingDown = _IconLib.trendingDown;

  /// Target icon for metrics
  static const IconData target = _IconLib.target;

  /// Rotate CCW icon for reordering
  static const IconData rotateCcw = _IconLib.rotateCcw;

  /// Apple icon
  static const IconData apple = _IconLib2.apple;

  /// Google icon
  static const IconData google = _IconLib2.google;

  /// NFC icon
  static const IconData nfc = _IconLib.nfc;

  /// Chart icon for reports
  static const IconData chart = _IconLib.barChart3;

  /// Download icon
  static const IconData download = _IconLib.download;

  /// Upload icon
  static const IconData upload = _IconLib.upload;

  /// Upload Cloud icon
  static const IconData uploadCloud = _IconLib.uploadCloud;

  /// File Check icon
  static const IconData fileCheck = _IconLib.fileCheck;

  /// Utensils icon
  static const IconData utensils = _IconLib.utensils;

  /// Wine icon
  static const IconData wine = _IconLib.wine;

  /// Award icon
  static const IconData award = _IconLib.award;
}
