export type AdminModule = {
  slug: string;
  group: string;
  title: string;
  livePath: string;
  purpose: string;
  listColumns: string[];
  formFields: string[];
  workflow: string[];
  actions: string[];
};

export const adminModules: AdminModule[] = [
  {
    slug: "participants",
    group: "Operations",
    title: "Participants",
    livePath: "/admin/participants",
    purpose: "Search, edit, and support annual conference participants.",
    listColumns: ["Reference", "Name", "Email", "Company", "Category", "Amount", "Registration", "Payment", "QR", "Actions"],
    formFields: ["Registration Reference", "First Name", "Middle Name", "Last Name", "Email", "Mobile Number", "Company", "Job Title", "Membership Type", "Membership Number", "Chapter", "Participant Category"],
    workflow: ["Registered participant appears in list", "Staff reviews details", "Payment status is updated", "QR credential is issued", "Participant appears in reports and scanner lookup"],
    actions: ["View", "Edit", "Verify Registration", "Verify Payment", "Generate QR", "Export"]
  },
  {
    slug: "registration",
    group: "Manage",
    title: "Registration",
    livePath: "/admin/registration",
    purpose: "Configure registration controls and public registration flow.",
    listColumns: ["Setting", "Value", "Status", "Updated By", "Updated At", "Actions"],
    formFields: ["Registration Enabled", "Opening Message", "Closing Message", "Capacity", "Lock Registration", "Data Privacy Consent Version", "Terms Version"],
    workflow: ["Configure registration settings", "Publish registration content", "Collect participant submissions", "Review submissions", "Lock or reopen registration when needed"],
    actions: ["Save Settings", "Preview Form", "Publish", "Audit Changes"]
  },
  {
    slug: "raffle",
    group: "Engagement",
    title: "Raffle",
    livePath: "/admin/raffle",
    purpose: "Run participant raffles and record winners.",
    listColumns: ["Draw", "Prize", "Eligible Pool", "Winner", "Drawn At", "Status", "Actions"],
    formFields: ["Prize Name", "Sponsor", "Eligibility Rule", "Number of Winners", "Draw Status", "Display Winner Publicly"],
    workflow: ["Configure raffle settings", "Filter eligible participants", "Run draw", "Confirm winner", "Publish or export winner record"],
    actions: ["Start Draw", "Redraw", "Confirm Winner", "Export Winners"]
  },
  {
    slug: "exhibitor-application",
    group: "Exhibitors",
    title: "Exhibitors Application",
    livePath: "/admin/exhibitorapplication",
    purpose: "Review public exhibitor applications and turn approved applicants into exhibitor accounts.",
    listColumns: ["Company", "Contact Person", "Email", "Package", "Status", "Submitted At", "Actions"],
    formFields: ["Company Name", "Contact Person", "Email", "Mobile Number", "Booth Package", "Message", "Internal Notes", "Decision"],
    workflow: ["Application submitted", "Staff reviews requirements", "Approve or reject", "Create exhibitor account", "Notify applicant"],
    actions: ["View", "Approve", "Reject", "Create Account", "Send Email"]
  },
  {
    slug: "exhibitor-accounts",
    group: "Exhibitors",
    title: "Exhibitors' Account",
    livePath: "/admin/exhibitoraccount",
    purpose: "Manage exhibitor portal accounts and booth access.",
    listColumns: ["Company", "Username", "Contact", "Booth", "Status", "Last Login", "Actions"],
    formFields: ["Company", "Username", "Password Reset", "Booth Number", "Sponsor Tier", "Account Status"],
    workflow: ["Create account from approved exhibitor", "Assign booth", "Send credentials", "Track account access", "Suspend if needed"],
    actions: ["Create", "Edit", "Reset Password", "Suspend", "Log In As Support"]
  },
  {
    slug: "contact-submissions",
    group: "Operations",
    title: "Contact Us Submissions",
    livePath: "/admin/contactus",
    purpose: "Triage messages from the public contact form.",
    listColumns: ["Name", "Email", "Category", "Subject", "Status", "Assigned To", "Submitted At", "Actions"],
    formFields: ["Category", "Subject", "Message", "Status", "Assigned Staff", "Internal Notes", "Reply"],
    workflow: ["Inquiry received", "Assign staff", "Reply or add notes", "Mark resolved", "Keep audit trail"],
    actions: ["View", "Assign", "Reply", "Resolve", "Export"]
  },
  {
    slug: "reports",
    group: "Reports",
    title: "Statistics",
    livePath: "/admin/reports",
    purpose: "View registration and activity statistics.",
    listColumns: ["Metric", "Current Value", "Filter", "Exportable", "Updated At"],
    formFields: ["Date Range", "Participant Category", "Chapter", "Company", "Payment Status", "Verification Status", "Session"],
    workflow: ["Select filters", "Review statistics", "Open table alternative", "Export CSV/XLSX", "Record export job"],
    actions: ["Apply Filters", "Export CSV", "Export XLSX", "Print"]
  },
  {
    slug: "feedback",
    group: "Reports",
    title: "User Feedbacks",
    livePath: "/admin/feedbacks",
    purpose: "Review participant and attendee feedback.",
    listColumns: ["Participant", "Rating", "Category", "Comment", "Status", "Submitted At", "Actions"],
    formFields: ["Feedback Category", "Rating", "Comment", "Status", "Internal Response"],
    workflow: ["Feedback submitted", "Staff reviews", "Flag for follow-up", "Resolve", "Include in report"],
    actions: ["View", "Mark Reviewed", "Flag", "Export"]
  },
  {
    slug: "dates",
    group: "Schedules",
    title: "Annual Conference Dates",
    livePath: "/admin/dates",
    purpose: "Manage conference day labels and important dates.",
    listColumns: ["Date", "Label", "Start Time", "End Time", "Published", "Actions"],
    formFields: ["Conference Day", "Date", "Start Time", "End Time", "Display Order", "Published"],
    workflow: ["Add day/date", "Set display order", "Publish", "Use in session scheduling"],
    actions: ["Add Date", "Edit", "Publish", "Archive"]
  },
  {
    slug: "concurrent-session",
    group: "Schedules",
    title: "Concurrent Session",
    livePath: "/admin/concurrentsession",
    purpose: "Manage concurrent session details, capacity, enrollment, and waitlist behavior.",
    listColumns: ["Code", "Title", "Track", "Room", "Schedule", "Capacity", "Enrolled", "Waitlist", "Status", "Actions"],
    formFields: ["Title", "Session Code", "Track", "Room", "Description", "Start", "End", "Capacity", "Waitlist Capacity", "Enrollment Opens", "Enrollment Closes", "Published"],
    workflow: ["Create session", "Assign date/room/track", "Set capacity", "Publish", "Participants enroll", "Staff monitors utilization"],
    actions: ["Add Session", "Edit", "Manage Enrollment", "View Waitlist", "Export"]
  },
  {
    slug: "plenary-sessions",
    group: "Schedules",
    title: "Plenary Sessions",
    livePath: "/admin/plenarysessions",
    purpose: "Manage plenary sessions and speaker assignments.",
    listColumns: ["Code", "Title", "Speaker", "Schedule", "Attendance Mode", "Published", "Actions"],
    formFields: ["Title", "Session Code", "Speaker", "Description", "Start", "End", "Attendance Mode", "Mandatory", "Published"],
    workflow: ["Create plenary", "Assign speaker", "Set attendance mode", "Publish", "Auto-assign or open enrollment", "Scan attendance"],
    actions: ["Add Plenary", "Edit", "Assign Speakers", "Attendance Report"]
  },
  {
    slug: "sponsors-list",
    group: "Sponsors",
    title: "Sponsors List",
    livePath: "/admin/sponsorslist",
    purpose: "Manage sponsor records displayed on the public website.",
    listColumns: ["Sponsor", "Category", "Logo", "Website", "Featured", "Published", "Actions"],
    formFields: ["Sponsor Name", "Sponsor Category", "Logo", "Website", "Description", "Display Order", "Featured", "Published"],
    workflow: ["Create sponsor", "Assign category", "Upload logo", "Publish", "Display on homepage and sponsors page"],
    actions: ["Add Sponsor", "Edit", "Upload Logo", "Publish"]
  },
  {
    slug: "sponsor-category",
    group: "Sponsors",
    title: "Sponsor Category",
    livePath: "/admin/sponsorcategory",
    purpose: "Configure sponsor tiers/categories.",
    listColumns: ["Category", "Display Order", "Active", "Actions"],
    formFields: ["Category Name", "Description", "Display Order", "Active"],
    workflow: ["Create category", "Sort tiers", "Assign sponsors", "Publish"],
    actions: ["Add Category", "Edit", "Deactivate"]
  },
  {
    slug: "raffle-settings",
    group: "Manage",
    title: "Raffle Settings",
    livePath: "/admin/rafflesettings",
    purpose: "Configure raffle eligibility and draw behavior.",
    listColumns: ["Setting", "Value", "Status", "Actions"],
    formFields: ["Raffle Enabled", "Eligibility Source", "Exclude Previous Winners", "Require Attendance", "Public Winner Display"],
    workflow: ["Set rules", "Save settings", "Use during raffle draw", "Audit changes"],
    actions: ["Save Settings", "Reset Rules"]
  },
  {
    slug: "exhibitors",
    group: "Manage",
    title: "Exhibitors",
    livePath: "/admin/exhibitors",
    purpose: "Manage exhibitor public listing and booth metadata.",
    listColumns: ["Exhibitor", "Booth", "Category", "Logo", "Published", "Actions"],
    formFields: ["Exhibitor Name", "Booth Number", "Category", "Logo", "Website", "Description", "Published"],
    workflow: ["Create exhibitor", "Assign booth", "Upload assets", "Publish listing"],
    actions: ["Add Exhibitor", "Edit", "Publish"]
  },
  {
    slug: "presentations",
    group: "Manage",
    title: "Presentations",
    livePath: "/admin/presentations",
    purpose: "Upload and organize presentation materials.",
    listColumns: ["Title", "Session", "Speaker", "File", "Published", "Downloads", "Actions"],
    formFields: ["Presentation Title", "Session", "Speaker", "File Upload", "Description", "Published"],
    workflow: ["Upload file", "Attach to session", "Publish to eligible users", "Track downloads"],
    actions: ["Upload", "Replace File", "Publish", "Download"]
  },
  {
    slug: "users",
    group: "Manage",
    title: "Users",
    livePath: "/admin/users",
    purpose: "Manage admin and staff user accounts.",
    listColumns: ["Username", "Name", "Role", "Status", "Last Login", "Actions"],
    formFields: ["Username", "Email", "Password", "Role", "Permissions", "Status"],
    workflow: ["Create staff user", "Assign role/permissions", "Send credentials", "Monitor logs", "Deactivate when needed"],
    actions: ["Add User", "Edit", "Reset Password", "Deactivate"]
  },
  {
    slug: "industry",
    group: "Manage",
    title: "Industry",
    livePath: "/admin/industry",
    purpose: "Maintain industry options used in participant profiles and reports.",
    listColumns: ["Industry", "Active", "Display Order", "Actions"],
    formFields: ["Industry Name", "Display Order", "Active"],
    workflow: ["Create option", "Use in registration form", "Report by industry"],
    actions: ["Add Industry", "Edit", "Deactivate"]
  },
  {
    slug: "user-menu",
    group: "Web Pages",
    title: "User Menu",
    livePath: "/admin/usermenu",
    purpose: "Configure public and participant navigation links.",
    listColumns: ["Label", "URL", "Location", "Display Order", "Visible", "Actions"],
    formFields: ["Menu Label", "URL", "Location", "Display Order", "Visible"],
    workflow: ["Add menu item", "Sort", "Publish", "Verify public navigation"],
    actions: ["Add Menu Item", "Edit", "Hide"]
  },
  {
    slug: "header",
    group: "Web Pages",
    title: "Header",
    livePath: "/admin/header",
    purpose: "Manage homepage hero/header content.",
    listColumns: ["Heading", "Subtitle", "Button", "Image", "Published", "Actions"],
    formFields: ["Heading", "Subtitle", "Primary Button Label", "Primary Button URL", "Background Image", "Published"],
    workflow: ["Edit header copy", "Upload image", "Preview", "Publish"],
    actions: ["Save", "Preview", "Publish"]
  },
  {
    slug: "about-section",
    group: "Web Pages",
    title: "About Section",
    livePath: "/admin/about",
    purpose: "Manage public about-section content.",
    listColumns: ["Block", "Title", "Published", "Updated At", "Actions"],
    formFields: ["Title", "Description", "Image", "Display Order", "Published"],
    workflow: ["Create content block", "Preview", "Publish", "Track revisions"],
    actions: ["Add Block", "Edit", "Preview", "Publish"]
  },
  {
    slug: "page-schedules",
    group: "Web Pages",
    title: "Schedules",
    livePath: "/admin/schedules",
    purpose: "Control schedule content shown on the public website.",
    listColumns: ["Section", "Title", "Linked Session", "Published", "Actions"],
    formFields: ["Section Title", "Description", "Linked Session", "Display Order", "Published"],
    workflow: ["Add schedule section", "Link sessions", "Preview", "Publish"],
    actions: ["Add", "Edit", "Publish"]
  },
  {
    slug: "expo",
    group: "Web Pages",
    title: "Expo",
    livePath: "/admin/expo",
    purpose: "Manage expo page content and exhibitor highlights.",
    listColumns: ["Title", "Exhibitor", "Asset", "Published", "Actions"],
    formFields: ["Title", "Description", "Exhibitor", "Image", "Published"],
    workflow: ["Add expo content", "Attach exhibitor", "Preview", "Publish"],
    actions: ["Add", "Edit", "Publish"]
  },
  {
    slug: "speakers",
    group: "Web Pages",
    title: "Speakers",
    livePath: "/admin/speakers",
    purpose: "Manage speaker profiles shown publicly and linked to sessions.",
    listColumns: ["Speaker", "Title", "Company", "Featured", "Published", "Actions"],
    formFields: ["Full Name", "Professional Title", "Company", "Biography", "Photo", "Featured", "Published"],
    workflow: ["Create speaker", "Upload photo", "Assign sessions", "Feature on homepage", "Publish"],
    actions: ["Add Speaker", "Edit", "Assign Sessions", "Publish"]
  },
  {
    slug: "venue",
    group: "Web Pages",
    title: "Venue",
    livePath: "/admin/venue",
    purpose: "Manage venue content, maps, address, and room details.",
    listColumns: ["Venue", "Address", "Map", "Published", "Actions"],
    formFields: ["Venue Name", "Address", "Map Embed", "Directions", "Image", "Published"],
    workflow: ["Edit venue", "Add map", "Preview public page", "Publish"],
    actions: ["Save", "Preview", "Publish"]
  },
  {
    slug: "logs",
    group: "User Menu",
    title: "Logs",
    livePath: "/admin/logs",
    purpose: "Review administrative activity logs.",
    listColumns: ["Date", "User", "Action", "Module", "IP Address", "Details"],
    formFields: ["Date Range", "User", "Action", "Module"],
    workflow: ["Filter logs", "Review sensitive changes", "Export for audit"],
    actions: ["Filter", "Export"]
  }
];

export function getAdminModule(slug: string) {
  return adminModules.find((module) => module.slug === slug);
}

export const adminGroups = Array.from(new Set(adminModules.map((module) => module.group)));
