// Payment constants
export const PAYMENT_AMOUNT = 50.0;

// Rate limiting constants
export const RATE_LIMIT_REQUESTS_PER_IP = 5;
export const RATE_LIMIT_REQUESTS_PER_USER = 10;
export const RATE_LIMIT_WINDOW_MINUTES = 15;
export const RATE_LIMIT_WINDOW_MS = RATE_LIMIT_WINDOW_MINUTES * 60 * 1000;
export const SEND_MESSAGE_RATE_LIMIT = 60; // 60 messages per 15 min window per IP
export const VERIFY_RATE_LIMIT = 5; // 5 email verification attempts per window
export const VERIFY_WINDOW_MS = RATE_LIMIT_WINDOW_MS;

// AI rate limiting constants
export const AI_RATE_LIMIT = 5;
export const AI_WINDOW_MS = RATE_LIMIT_WINDOW_MS;

// Input validation constants
export const MAX_LENGTH_TRADE = 100;
export const MAX_LENGTH_LOCATION = 200;
export const MAX_LENGTH_AVAILABILITY = 50;
export const MAX_LENGTH_TRANSCRIPT = 5000;
export const MAX_LENGTH_VOICE_TRANSCRIPT = 2000;
export const MAX_LENGTH_MESSAGE_CONTENT = 5000;
export const MAX_LENGTH_EMAIL = 254;
export const MAX_RATING_TEXT_LENGTH = 500;

// Timeout constants (in milliseconds)
export const TIMEOUT_ABN_LOOKUP = 10000;
export const DELAY_RESET_PASSWORD_REDIRECT = 2000;

// HTTP status codes
export const HTTP_STATUS_INTERNAL_SERVER_ERROR = 500;
export const HTTP_STATUS_OK = 200;

// Australian postcode constants (for testing/validation)
export const POSTCODE_SYDNEY = '2000';
export const POSTCODE_MELBOURNE = '3000';

// Percentage constants
export const PERCENTAGE_WORKER_KEEP = 100; // Workers keep 100% of wages

// Worker trades - used in worker profiles and AI validation
export const TRADES = [
  "Labourer",
  "Steel Fixer", 
  "Formworker",
  "Carpenter",
  "Electrician",
  "Plumber",
  "Concreter",
  "Bricklayer",
  "Painter",
  "Roofer",
  "Scaffolder",
  "Tiler",
  "Plasterer",
  "Welder",
  "Crane Operator",
  "Excavator Operator",
] as const;

export type Trade = typeof TRADES[number];

// Contractor job categories - used in job posting
export const TRADE_CATEGORIES = [
  { id: "steel-fixer", label: "Steel Fixer" },
  { id: "formworker", label: "Formworker" },
  { id: "labourer", label: "Labourer" },
  { id: "concreter", label: "Concreter" },
  { id: "carpenter", label: "Carpenter" },
  { id: "scaffolder", label: "Scaffolder" },
  { id: "other", label: "Other" },
] as const;

export type TradeCategory = typeof TRADE_CATEGORIES[number];

/**
 * Convert job category ID to trade name
 * 
 * @param categoryId - ID from TRADE_CATEGORIES
 * @returns Trade name label or null if not found
 * 
 * @example
 * getTradeFromCategoryId('steel-fixer')
 * // Returns: 'Steel Fixer'
 * 
 * @example
 * getTradeFromCategoryId('invalid-id')
 * // Returns: null
 */
export function getTradeFromCategoryId(categoryId: string): string | null {
  const category = TRADE_CATEGORIES.find(cat => cat.id === categoryId);
  return category ? category.label : null;
}