// Constants for frontend use

// API Endpoints
export const API_ENDPOINTS = {
  AUTH: {
    LOGIN: '/auth/login',
    REGISTER: '/auth/register',
    REFRESH: '/auth/refresh',
    LOGOUT: '/auth/logout',
    PROFILE: '/auth/profile',
    VERIFY_EMAIL: '/auth/verify-email',
    FORGOT_PASSWORD: '/auth/forgot-password',
    RESET_PASSWORD: '/auth/reset-password',
  },
  USERS: {
    BASE: '/users',
    PROFILE: '/users/profile',
    AVATAR: '/users/avatar',
    PREFERENCES: '/users/preferences',
  },
  EVENTS: {
    BASE: '/events',
    FEATURED: '/events/featured',
    CATEGORIES: '/events/categories',
    SEARCH: '/events/search',
    SCHEDULES: '/events/:id/schedules',
    MEDIA: '/events/:id/media',
    ARTISTS: '/events/:id/artists',
    REVIEWS: '/events/:id/reviews',
  },
  TICKETS: {
    BASE: '/tickets',
    TYPES: '/ticket-types',
    RESERVATIONS: '/ticket-reservations',
    VALIDATE: '/tickets/validate',
    TRANSFER: '/tickets/transfer',
    QR_CODE: '/tickets/:id/qr-code',
  },
  ORDERS: {
    BASE: '/orders',
    ITEMS: '/orders/:id/items',
    DISCOUNTS: '/orders/:id/discounts',
    SHIPPING: '/orders/:id/shipping',
    STATUS: '/orders/:id/status',
    INVOICE: '/orders/:id/invoice',
  },
  PAYMENTS: {
    BASE: '/payments',
    METHODS: '/payment-methods',
    PROCESS: '/payments/process',
    WEBHOOK: '/payments/webhook',
    REFUNDS: '/payments/:id/refunds',
    DISPUTES: '/payments/:id/disputes',
  },
  NOTIFICATIONS: {
    BASE: '/notifications',
    TEMPLATES: '/notification-templates',
    PREFERENCES: '/notification-preferences',
    MARK_READ: '/notifications/:id/read',
    MARK_ALL_READ: '/notifications/read-all',
  },
  MERCHANDISE: {
    BASE: '/merchandise',
    VARIANTS: '/merchandise/:id/variants',
    ORDERS: '/merchandise-orders',
    REVIEWS: '/merchandise/:id/reviews',
    INVENTORY: '/merchandise/:id/inventory',
    COLLECTIONS: '/merchandise-collections',
  },
  SETTINGS: {
    BASE: '/settings',
    CATEGORIES: '/settings/categories',
    CATEGORY: '/settings/category/:category',
    SETTING: '/settings/:category/:key',
    BULK_UPDATE: '/settings/bulk-update',
    EXPORT: '/settings/export',
    IMPORT: '/settings/import',
    HISTORY: '/settings-history',
    HISTORY_BY_SETTING: '/settings-history/setting/:settingId',
    HISTORY_BY_CATEGORY: '/settings-history/category/:category',
    HISTORY_STATISTICS: '/settings-history/statistics',
  },
  FEATURE_FLAGS: {
    BASE: '/feature-flags',
    ACTIVE: '/feature-flags/active',
    EVALUATE: '/feature-flags/evaluate',
    FLAG: '/feature-flags/:name',
    TOGGLE: '/feature-flags/:name/toggle',
    METRICS: '/feature-flags/:name/metrics',
  },
  EMAIL_TEMPLATES: {
    BASE: '/email-templates',
    BY_TYPE: '/email-templates/by-type/:type',
    RENDER: '/email-templates/render',
    TEMPLATE: '/email-templates/:id',
    BY_KEY: '/email-templates/key/:templateKey',
    PREVIEW: '/email-templates/:id/preview',
    DUPLICATE: '/email-templates/:id/duplicate',
  },
  FILES: {
    UPLOAD: '/files/upload',
    MULTIPLE_UPLOAD: '/files/upload-multiple',
    DELETE: '/files/:id',
  },
} as const;

// Pagination
export const PAGINATION = {
  DEFAULT_PAGE: 1,
  DEFAULT_LIMIT: 10,
  MAX_LIMIT: 100,
  LIMITS: [10, 25, 50, 100],
} as const;

// Date Formats
export const DATE_FORMATS = {
  API: 'YYYY-MM-DDTHH:mm:ss.SSSZ',
  DISPLAY: 'DD/MM/YYYY',
  DISPLAY_WITH_TIME: 'DD/MM/YYYY HH:mm',
  TIME_ONLY: 'HH:mm',
  MONTH_YEAR: 'MMMM YYYY',
  SHORT_DATE: 'DD MMM YYYY',
  FULL_DATE: 'dddd, DD MMMM YYYY',
} as const;

// Currency
export const CURRENCY = {
  DEFAULT: 'IDR',
  SYMBOL: 'Rp',
  DECIMAL_PLACES: 0,
  THOUSANDS_SEPARATOR: '.',
  DECIMAL_SEPARATOR: ',',
} as const;

// File Upload
export const FILE_UPLOAD = {
  MAX_SIZE: 10 * 1024 * 1024, // 10MB
  ALLOWED_IMAGE_TYPES: ['image/jpeg', 'image/png', 'image/webp', 'image/gif'],
  ALLOWED_DOCUMENT_TYPES: ['application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'],
  ALLOWED_VIDEO_TYPES: ['video/mp4', 'video/webm', 'video/ogg'],
  ALLOWED_AUDIO_TYPES: ['audio/mp3', 'audio/wav', 'audio/ogg'],
} as const;

// Validation Rules
export const VALIDATION = {
  USERNAME: {
    MIN_LENGTH: 3,
    MAX_LENGTH: 50,
    PATTERN: /^[a-zA-Z0-9_]+$/,
  },
  PASSWORD: {
    MIN_LENGTH: 8,
    MAX_LENGTH: 50,
    PATTERN: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]/,
  },
  EMAIL: {
    PATTERN: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
  },
  PHONE: {
    PATTERN: /^(\+62|62|0)[0-9]{9,13}$/,
  },
  PRICE: {
    MIN: 0,
    MAX: 999999999,
  },
  QUANTITY: {
    MIN: 1,
    MAX: 1000,
  },
} as const;

// Status Colors
export const STATUS_COLORS = {
  // Order Status
  PENDING: '#FFA500',
  PAID: '#32CD32',
  CONFIRMED: '#4169E1',
  CANCELLED: '#DC143C',
  REFUNDED: '#9370DB',
  EXPIRED: '#696969',
  
  // Payment Status
  PROCESSING: '#FFD700',
  COMPLETED: '#228B22',
  FAILED: '#B22222',
  PARTIALLY_REFUNDED: '#DDA0DD',
  
  // Event Status
  DRAFT: '#A9A9A9',
  PUBLISHED: '#32CD32',
  POSTPONED: '#FF8C00',
  
  // Ticket Status
  ACTIVE: '#32CD32',
  USED: '#4169E1',
  REFUNDED_TICKET: '#9370DB',
  
  // Notification Status
  SENT: '#32CD32',
  DELIVERED: '#228B22',
  OPENED: '#4169E1',
  CLICKED: '#FF6347',
  BOUNCED: '#DC143C',
  
  // Settings Status
  ACTIVE_SETTING: '#32CD32',
  INACTIVE_SETTING: '#DC143C',
  ENCRYPTED: '#9370DB',
  REQUIRES_RESTART: '#FF8C00',
  
  // Feature Flag Status
  ACTIVE_FLAG: '#32CD32',
  INACTIVE_FLAG: '#DC143C',
  TESTING_FLAG: '#FFD700',
  DEPRECATED_FLAG: '#FF8C00',
  ARCHIVED_FLAG: '#696969',
  
  // Email Template Status
  ACTIVE_TEMPLATE: '#32CD32',
  INACTIVE_TEMPLATE: '#DC143C',
  DRAFT_TEMPLATE: '#A9A9A9',
  ARCHIVED_TEMPLATE: '#696969',
} as const;

// Default Values
export const DEFAULTS = {
  EVENT: {
    CATEGORY: 'OTHER',
    STATUS: 'DRAFT',
    MAX_CAPACITY: 1000,
    MIN_AGE: 0,
  },
  TICKET: {
    QUANTITY: 1,
    SALE_DURATION_DAYS: 30,
  },
  ORDER: {
    CURRENCY: 'IDR',
    EXPIRY_MINUTES: 30,
  },
  MERCHANDISE: {
    CATEGORY: 'OTHER',
    STATUS: 'DRAFT',
    TRACK_INVENTORY: true,
    STOCK: 0,
  },
  NOTIFICATION: {
    TYPE: 'EMAIL',
    PRIORITY: 'NORMAL',
  },
  SETTINGS: {
    CATEGORY: 'PLATFORM',
    DATA_TYPE: 'STRING',
    ENVIRONMENT: 'ALL',
    IS_ACTIVE: true,
    IS_ENCRYPTED: false,
    REQUIRES_RESTART: false,
    IS_READ_ONLY: false,
    IS_SYSTEM_GENERATED: false,
  },
  FEATURE_FLAG: {
    TYPE: 'BOOLEAN',
    STATUS: 'INACTIVE',
    SCOPE: 'GLOBAL',
    IS_ENABLED: false,
    ROLLOUT_PERCENTAGE: 0,
    IS_PERMANENT: false,
    ENVIRONMENT: 'ALL',
  },
  EMAIL_TEMPLATE: {
    TYPE: 'SYSTEM',
    FORMAT: 'HTML',
    PRIORITY: 'NORMAL',
    STATUS: 'ACTIVE',
    IS_ACTIVE: true,
    IS_DEFAULT: false,
    VERSION: 1,
  },
} as const;

// Error Messages
export const ERROR_MESSAGES = {
  REQUIRED: 'Field ini wajib diisi',
  INVALID_EMAIL: 'Format email tidak valid',
  INVALID_PHONE: 'Format nomor telepon tidak valid',
  PASSWORD_TOO_SHORT: 'Password minimal 8 karakter',
  PASSWORD_TOO_WEAK: 'Password harus mengandung huruf besar, huruf kecil, angka, dan simbol',
  USERNAME_INVALID: 'Username hanya boleh mengandung huruf, angka, dan underscore',
  FILE_TOO_LARGE: 'Ukuran file terlalu besar',
  FILE_TYPE_NOT_ALLOWED: 'Tipe file tidak diizinkan',
  NETWORK_ERROR: 'Terjadi kesalahan jaringan',
  SERVER_ERROR: 'Terjadi kesalahan server',
  UNAUTHORIZED: 'Anda tidak memiliki akses',
  FORBIDDEN: 'Akses ditolak',
  NOT_FOUND: 'Data tidak ditemukan',
  VALIDATION_ERROR: 'Data tidak valid',
} as const;

// Success Messages
export const SUCCESS_MESSAGES = {
  CREATED: 'Data berhasil dibuat',
  UPDATED: 'Data berhasil diperbarui',
  DELETED: 'Data berhasil dihapus',
  SAVED: 'Data berhasil disimpan',
  SENT: 'Berhasil dikirim',
  UPLOADED: 'File berhasil diunggah',
  LOGIN_SUCCESS: 'Login berhasil',
  LOGOUT_SUCCESS: 'Logout berhasil',
  REGISTER_SUCCESS: 'Registrasi berhasil',
  PASSWORD_RESET: 'Password berhasil direset',
  EMAIL_VERIFIED: 'Email berhasil diverifikasi',
} as const;

// Local Storage Keys
export const STORAGE_KEYS = {
  ACCESS_TOKEN: 'access_token',
  REFRESH_TOKEN: 'refresh_token',
  USER_DATA: 'user_data',
  CART: 'cart',
  PREFERENCES: 'preferences',
  THEME: 'theme',
  LANGUAGE: 'language',
} as const;

// Theme
export const THEME = {
  COLORS: {
    PRIMARY: '#4F46E5',
    SECONDARY: '#7C3AED',
    SUCCESS: '#10B981',
    WARNING: '#F59E0B',
    ERROR: '#EF4444',
    INFO: '#3B82F6',
    GRAY: {
      50: '#F9FAFB',
      100: '#F3F4F6',
      200: '#E5E7EB',
      300: '#D1D5DB',
      400: '#9CA3AF',
      500: '#6B7280',
      600: '#4B5563',
      700: '#374151',
      800: '#1F2937',
      900: '#111827',
    },
  },
  BREAKPOINTS: {
    SM: '640px',
    MD: '768px',
    LG: '1024px',
    XL: '1280px',
    '2XL': '1536px',
  },
} as const;

// Feature Flags
export const FEATURES = {
  ENABLE_NOTIFICATIONS: true,
  ENABLE_MERCHANDISE: true,
  ENABLE_ANALYTICS: true,
  ENABLE_REVIEWS: true,
  ENABLE_SOCIAL_LOGIN: true,
  ENABLE_MULTI_LANGUAGE: false,
  ENABLE_DARK_MODE: true,
  ENABLE_PWA: false,
  ENABLE_SETTINGS_MANAGEMENT: true,
  ENABLE_FEATURE_FLAGS: true,
  ENABLE_EMAIL_TEMPLATES: true,
  ENABLE_SETTINGS_HISTORY: true,
  ENABLE_SETTINGS_ENCRYPTION: true,
} as const;