/**
 * Moderation Queue Constants
 * 
 * Centralized configuration values for the moderation system.
 */

export const MODERATION_CONSTANTS = {
  // TanStack Query configuration
  QUERY_STALE_TIME: 30000,                    // 30 seconds
  QUERY_GC_TIME: 5 * 60 * 1000,              // 5 minutes
  QUERY_RETRY_COUNT: 2,
  
  // Realtime configuration
  REALTIME_DEBOUNCE_MS: 500,                  // 500ms
  REALTIME_OPTIMISTIC_REMOVAL_TIMEOUT: 5000,  // 5 seconds
  
  // Lock configuration
  LOCK_DURATION_MS: 15 * 60 * 1000,          // 15 minutes
  LOCK_EXTENSION_MS: 10 * 60 * 1000,         // 10 minutes
  
  // Cache configuration
  MAX_ENTITY_CACHE_SIZE: 500,
  MAX_PROFILE_CACHE_SIZE: 500,
  
  // Pagination
  DEFAULT_PAGE_SIZE: 25,
  MAX_PAGE_SIZE: 100,
  
  // Filter debounce
  FILTER_DEBOUNCE_MS: 300,
  
  // Role Labels
  ROLE_LABELS: {
    admin: 'Administrator',
    moderator: 'Moderator',
    user: 'User',
    superuser: 'Superuser',
  } as const,
  
  // Status Labels
  STATUS_LABELS: {
    pending: 'Pending Review',
    approved: 'Approved',
    rejected: 'Rejected',
    partially_approved: 'Partially Approved',
    escalated: 'Escalated',
    in_review: 'In Review',
  } as const,
  
  // Submission Type Labels
  SUBMISSION_TYPE_LABELS: {
    park: 'Park',
    ride: 'Ride',
    company: 'Company',
    ride_model: 'Ride Model',
    photo: 'Photo',
  } as const,
  
  // Report Type Labels
  REPORT_TYPE_LABELS: {
    spam: 'Spam',
    inappropriate: 'Inappropriate Content',
    harassment: 'Harassment',
    misinformation: 'Misinformation',
    fake_info: 'Fake Information',
    offensive: 'Offensive Language',
    other: 'Other',
  } as const,
  
  // Entity Type Labels
  ENTITY_TYPE_LABELS: {
    park: 'Park',
    ride: 'Ride',
    company: 'Company',
    ride_model: 'Ride Model',
    review: 'Review',
    profile: 'Profile',
    content_submission: 'Content Submission',
  } as const,
  
  // Status Colors (for badges)
  STATUS_COLORS: {
    pending: 'secondary',
    approved: 'default',
    rejected: 'destructive',
    partially_approved: 'outline',
    escalated: 'destructive',
    in_review: 'secondary',
  } as const,
  
  // Report Status Colors
  REPORT_STATUS_COLORS: {
    pending: 'secondary',
    reviewed: 'default',
    dismissed: 'outline',
    resolved: 'default',
  } as const,
} as const;

export type ModerationConstants = typeof MODERATION_CONSTANTS;

// Helper functions for type-safe label access
export function getRoleLabel(role: keyof typeof MODERATION_CONSTANTS.ROLE_LABELS): string {
  return MODERATION_CONSTANTS.ROLE_LABELS[role] || role;
}

export function getStatusLabel(status: keyof typeof MODERATION_CONSTANTS.STATUS_LABELS): string {
  return MODERATION_CONSTANTS.STATUS_LABELS[status] || status;
}

export function getSubmissionTypeLabel(type: keyof typeof MODERATION_CONSTANTS.SUBMISSION_TYPE_LABELS): string {
  return MODERATION_CONSTANTS.SUBMISSION_TYPE_LABELS[type] || type;
}

export function getReportTypeLabel(type: keyof typeof MODERATION_CONSTANTS.REPORT_TYPE_LABELS): string {
  return MODERATION_CONSTANTS.REPORT_TYPE_LABELS[type] || type;
}

export function getEntityTypeLabel(type: keyof typeof MODERATION_CONSTANTS.ENTITY_TYPE_LABELS): string {
  return MODERATION_CONSTANTS.ENTITY_TYPE_LABELS[type] || type;
}
