import 'package:flutter/material.dart';


final Map<String, IconData> iconMapping = {
  // General Project Management Icons
  'dashboard': Icons.dashboard,               // Overview screen
  'project': Icons.work,                      // Represents a project
  'tasks': Icons.check_box,                   // Task list
  'calendar': Icons.calendar_today,           // Calendar view
  'team': Icons.group,                        // Team collaboration
  'kanban': Icons.view_column,                // Kanban board
  'timeline': Icons.timeline,                 // Project timeline
  'milestone': Icons.flag,                    // Milestones
  'priority': Icons.priority_high,            // General priority indicator
  'settings': Icons.settings,                 // Settings or configurations
  'chat': Icons.chat,                         // Communication/chat
  'files': Icons.insert_drive_file,           // File management
  'notes': Icons.note,                        // Notes or documentation
  'report': Icons.insert_chart,               // Reporting and analytics

  // Priority Related Icons
  'to_do': Icons.assignment,                  // To do tasks
  'in_progress': Icons.autorenew,             // Tasks in progress
  'complete': Icons.check_circle,             // Completed tasks
  'archived': Icons.archive,                  // Archived tasks

  // Deadline Related Icons
  'deadline': Icons.timer,                    // Deadline indicator
  'reminder': Icons.alarm,                    // Deadline reminder
  'due_today': Icons.today,                   // Tasks due today
  'upcoming': Icons.event_available,          // Upcoming deadlines

  // Additional
  'overdue': Icons.warning,                   // Overdue tasks or deadlines
  'budget': Icons.account_balance_wallet,     // Budget and finance
  'resource': Icons.perm_contact_calendar,    // Resource allocation
  'risk': Icons.warning_amber,                // Risk management
  'feedback': Icons.feedback,                 // Feedback and reviews
  'timeline_edit': Icons.edit_calendar,       // Edit project timeline
  'workflow': Icons.shuffle,                  // Workflow management
  'dependencies': Icons.link,                 // Task dependencies
  'progress': Icons.show_chart,               // Project progress
  'schedule': Icons.schedule,                 // Scheduling
  'support': Icons.support,                   // Support/help
  'permissions': Icons.lock,                  // Access permissions
  'backup': Icons.backup,                     // Data backup
  'integration': Icons.extension,             // Integrations
  'search': Icons.search,                     // Search functionality
  'announcement': Icons.announcement,         // Announcements or updates
  'analytics': Icons.analytics,               // Project analytics
  'assignment': Icons.assignment_turned_in,   // Task assignments
  'discussions': Icons.forum,                 // Discussions/threads
  'timeline_view': Icons.view_timeline,       // Detailed timeline view
  'board': Icons.dashboard_customize,         // Custom project boards
  'approval': Icons.how_to_vote,              // Approvals
  'review': Icons.rate_review,                // Reviews and feedback
  'objective': Icons.golf_course,             // Objectives/goals
  'settings_advanced': Icons.tune,            // Advanced settings
  'time_tracking': Icons.timer_outlined,      // Time tracking
  'checklist': Icons.checklist,               // Checklists
  'sync': Icons.sync,                         // Syncing data
  'upload': Icons.cloud_upload,               // Upload files
  'download': Icons.cloud_download,           // Download files
  'share': Icons.share,                       // Sharing options
  'tag': Icons.label,                         // Tags/labels
  'notifications': Icons.notifications,       // Notifications
  'user_roles': Icons.manage_accounts,        // User roles and permissions
  'logout': Icons.logout,                     // Logout
  'automation': Icons.auto_awesome,           // Automation
  'history': Icons.history,                   // Project history/logs
  'estimate': Icons.calculate,                // Estimates and costing
  'quality': Icons.verified,                  // Quality assurance
  'strategy': Icons.lightbulb,                // Strategy planning
  'feedback_form': Icons.comment,             // Feedback forms
  'presentation': Icons.slideshow,            // Project presentations
};


class ProjectIcons {
  static const IconData dashboard = Icons.dashboard;
  static const IconData project = Icons.work;
  static const IconData tasks = Icons.check_box;
  static const IconData calendar = Icons.calendar_today;
  static const IconData team = Icons.group;
  static const IconData kanban = Icons.view_column;
  static const IconData timeline = Icons.timeline;
  static const IconData milestone = Icons.flag;
  static const IconData priority = Icons.priority_high;
  static const IconData settings = Icons.settings;
  static const IconData chat = Icons.chat;
  static const IconData files = Icons.insert_drive_file;
  static const IconData notes = Icons.note;
  static const IconData report = Icons.insert_chart;
  static const IconData todo = Icons.assignment;
  static const IconData inProgress = Icons.autorenew;
  static const IconData complete = Icons.check_circle;
  static const IconData archived = Icons.archive;
  static const IconData deadline = Icons.timer;
  static const IconData reminder = Icons.alarm;
  static const IconData dueToday = Icons.today;
  static const IconData upcoming = Icons.event_available;
  static const IconData overdue = Icons.warning;
  static const IconData budget = Icons.account_balance_wallet;
  static const IconData resource = Icons.perm_contact_calendar;
  static const IconData risk = Icons.warning_amber;
  static const IconData feedback = Icons.feedback;
  static const IconData timelineEdit = Icons.edit_calendar;
  static const IconData workflow = Icons.shuffle;
  static const IconData dependencies = Icons.link;
  static const IconData progress = Icons.show_chart;
  static const IconData schedule = Icons.schedule;
  static const IconData support = Icons.support;
  static const IconData permissions = Icons.lock;
  static const IconData backup = Icons.backup;
  static const IconData integration = Icons.extension;
  static const IconData search = Icons.search;
  static const IconData announcement = Icons.announcement;
  static const IconData analytics = Icons.analytics;
  static const IconData assignment = Icons.assignment_turned_in;
  static const IconData discussions = Icons.forum;
  static const IconData timelineView = Icons.view_timeline;
  static const IconData board = Icons.dashboard_customize;
  static const IconData approval = Icons.how_to_vote;
  static const IconData review = Icons.rate_review;
  static const IconData objective = Icons.golf_course;
  static const IconData settingsAdvanced = Icons.tune;
  static const IconData timeTracking = Icons.timer_outlined;
  static const IconData checklist = Icons.checklist;
  static const IconData sync = Icons.sync;
  static const IconData upload = Icons.cloud_upload;
  static const IconData download = Icons.cloud_download;
  static const IconData share = Icons.share;
  static const IconData tag = Icons.label;
  static const IconData notifications = Icons.notifications;
  static const IconData userRoles = Icons.manage_accounts;
  static const IconData logout = Icons.logout;
  static const IconData automation = Icons.auto_awesome;
  static const IconData history = Icons.history;
  static const IconData estimate = Icons.calculate;
  static const IconData quality = Icons.verified;
  static const IconData strategy = Icons.lightbulb;
  static const IconData feedbackForm = Icons.comment;
  static const IconData presentation = Icons.slideshow;
}


extension IconDataKeyExtension on IconData {
  String get toIconKey {
    return iconMapping.entries.firstWhere(
      (entry) => entry.value == this,
      orElse: () => throw Exception('IconData not found in mapping.'),
    ).key;
  }
}

extension IconDataFromKeyExtension on String {
  IconData get toIconData {
    final iconData = iconMapping[this];
    if (iconData == null) {
      throw Exception('No IconData found for key: $this');
    }
    return iconData;
  }
}