/**
 * Feature Flags Configuration
 *
 * Controls which features are enabled/disabled for MVP.
 * Features marked as false are not yet implemented in the backend.
 *
 * TODO: Move these to environment variables or backend config after MVP.
 */

export const FEATURES = {
  /**
   * Two-Factor Authentication
   * Backend endpoints: /auth/2fa/setup, /auth/2fa/verify, /auth/2fa/disable, /auth/2fa/status
   */
  TWO_FACTOR_AUTH: true,

  /**
   * Playlist Collaboration Features
   * Backend endpoints: /playlists/:id/collaborators (GET, POST, PUT, DELETE)
   */
  PLAYLIST_COLLABORATION: true,
  PLAYLIST_SEARCH: false,
  PLAYLIST_SHARE: false,
  PLAYLIST_RECOMMENDATIONS: false,

  /**
   * HLS Streaming
   * Backend endpoints: /api/v1/tracks/:id/hls/info, /api/v1/tracks/:id/hls/status (NOT IMPLEMENTED)
   */
  HLS_STREAMING: false,

  /**
   * Role Management
   * Backend endpoints: /api/v1/users/:userId/roles, /api/v1/roles/* (NOT IMPLEMENTED)
   */
  ROLE_MANAGEMENT: false,

  /**
   * Notifications API
   * Backend endpoints: /api/v1/notifications/* (NOT IMPLEMENTED)
   */
  NOTIFICATIONS: false,
} as const;

/**
 * Type for feature flags
 */
export type FeatureFlag = keyof typeof FEATURES;

/**
 * Check if a feature is enabled
 */
export function isFeatureEnabled(feature: FeatureFlag): boolean {
  return Boolean(FEATURES[feature]);
}

/**
 * Assert that a feature is enabled, throw error if not
 */
export function requireFeature(feature: FeatureFlag): void {
  if (!isFeatureEnabled(feature)) {
    throw new Error(
      `Feature "${feature}" is not enabled. This feature is not available in the MVP.`,
    );
  }
}
