/**
 * Application-wide constants
 * Централизованное хранилище всех магических чисел и строк
 */

// ===========================
// PREVIEW DIMENSIONS
// ===========================
export const PREVIEW_DIMENSIONS = {
  /** Ширина preview в админке */
  WIDTH: 320,
  /** Высота preview в админке (увеличена для BottomActionButton) */
  HEIGHT: 750,
  /** Высота fallback для пустого preview */
  EMPTY_HEIGHT: 600,
  /** Ширина мобильного устройства */
  MOBILE_WIDTH: 375,
} as const;

// ===========================
// TIMEOUTS & DELAYS
// ===========================
export const TIMEOUTS = {
  /** Длительность показа toast уведомлений */
  TOAST_DURATION: 2000,
  /** Debounce для text inputs */
  DEBOUNCE_INPUT: 500,
  /** Timeout для API запросов */
  API_REQUEST: 30000,
  /** Debounce для auto-save */
  AUTO_SAVE: 1000,
} as const;

// ===========================
// PAGINATION
// ===========================
export const PAGINATION = {
  /** Дефолтное количество элементов на странице */
  DEFAULT_LIMIT: 50,
  /** Максимальное количество элементов на странице */
  MAX_LIMIT: 100,
  /** Дефолтная страница */
  DEFAULT_PAGE: 1,
  /** Лимит для dropdown */
  DROPDOWN_LIMIT: 20,
} as const;

// ===========================
// FILE UPLOAD
// ===========================
export const FILE_UPLOAD = {
  /** Максимальный размер файла (5MB) */
  MAX_SIZE: 5 * 1024 * 1024,
  /** Допустимые MIME типы изображений */
  ACCEPTED_IMAGE_TYPES: ['image/jpeg', 'image/png', 'image/gif', 'image/webp'],
  /** Расширения для accept атрибута */
  ACCEPTED_EXTENSIONS: '.jpg,.jpeg,.png,.gif,.webp',
} as const;

// ===========================
// VALIDATION LIMITS
// ===========================
export const VALIDATION = {
  /** Минимальная длина ID */
  MIN_ID_LENGTH: 1,
  /** Максимальная длина ID */
  MAX_ID_LENGTH: 100,
  /** Минимальная длина title */
  MIN_TITLE_LENGTH: 1,
  /** Максимальная длина title */
  MAX_TITLE_LENGTH: 200,
  /** Минимальное количество экранов */
  MIN_SCREENS: 1,
  /** Рекомендуемое максимальное количество экранов */
  RECOMMENDED_MAX_SCREENS: 50,
} as const;

// ===========================
// UI CONSTANTS
// ===========================
export const UI = {
  /** Высота header в px */
  HEADER_HEIGHT: 60,
  /** Высота sidebar в px */
  SIDEBAR_WIDTH: 380,
  /** Ширина canvas в px */
  CANVAS_WIDTH: 600,
  /** Z-index для модальных окон */
  MODAL_Z_INDEX: 1000,
  /** Z-index для toast */
  TOAST_Z_INDEX: 9999,
} as const;

// ===========================
// STORAGE KEYS
// ===========================
export const STORAGE_KEYS = {
  /** Сохраненный funnel state */
  FUNNEL_STATE: 'witlab_funnel_state',
  /** Expanded sections в sidebar */
  SIDEBAR_SECTIONS: 'witlab_sidebar_sections',
  /** Theme preference */
  THEME: 'witlab_theme',
  /** Last opened funnel */
  LAST_FUNNEL: 'witlab_last_funnel',
} as const;

// ===========================
// API ENDPOINTS
// ===========================
export const API_ENDPOINTS = {
  FUNNELS: '/api/funnels',
  FUNNEL_BY_ID: (id: string) => `/api/funnels/${id}`,
  FUNNEL_BY_FUNNEL_ID: (funnelId: string) => `/api/funnels/by-funnel-id/${funnelId}`,
  FUNNEL_DUPLICATE: (id: string) => `/api/funnels/${id}/duplicate`,
  FUNNEL_HISTORY: (id: string) => `/api/funnels/${id}/history`,
  IMAGES: '/api/images',
  IMAGE_UPLOAD: '/api/images/upload',
  IMAGE_BY_FILENAME: (filename: string) => `/api/images/${filename}`,
} as const;

// ===========================
// REGEX PATTERNS
// ===========================
export const PATTERNS = {
  /** ID pattern (alphanumeric + dash + underscore) */
  ID: /^[a-zA-Z0-9_-]+$/,
  /** Email pattern */
  EMAIL: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
  /** URL pattern */
  URL: /^https?:\/\/.+/,
  /** Hex color pattern */
  HEX_COLOR: /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,
} as const;

// ===========================
// DATE CONSTANTS
// ===========================
export const DATE = {
  /** Минимальный возраст */
  MIN_AGE: 18,
  /** Максимальный возраст */
  MAX_AGE: 100,
  /** Текущий год */
  CURRENT_YEAR: new Date().getFullYear(),
  /** Минимальный год рождения */
  MIN_BIRTH_YEAR: new Date().getFullYear() - 100,
  /** Максимальный год рождения */
  MAX_BIRTH_YEAR: new Date().getFullYear() - 18,
} as const;

// ===========================
// BUILD VARIANTS
// ===========================
export const BUILD_VARIANTS = {
  FRONTEND: 'frontend',
  FULL: 'full',
} as const;

export type BuildVariant = typeof BUILD_VARIANTS[keyof typeof BUILD_VARIANTS];

// ===========================
// ERROR CODES
// ===========================
export const ERROR_CODES = {
  VALIDATION_ERROR: 'VALIDATION_ERROR',
  NOT_FOUND: 'NOT_FOUND',
  UNAUTHORIZED: 'UNAUTHORIZED',
  FORBIDDEN: 'FORBIDDEN',
  INTERNAL_ERROR: 'INTERNAL_ERROR',
  DATABASE_ERROR: 'DATABASE_ERROR',
  DUPLICATE_KEY: 'DUPLICATE_KEY',
} as const;

// ===========================
// HTTP STATUS CODES
// ===========================
export const HTTP_STATUS = {
  OK: 200,
  CREATED: 201,
  NO_CONTENT: 204,
  BAD_REQUEST: 400,
  UNAUTHORIZED: 401,
  FORBIDDEN: 403,
  NOT_FOUND: 404,
  CONFLICT: 409,
  INTERNAL_ERROR: 500,
  SERVICE_UNAVAILABLE: 503,
} as const;
