/**
 * Tracks API Service
 * Action 6.1.1.1: Create tracks API service
 * Service layer for track-related API operations
 * Wraps existing track API functions into a unified service object
 */

import {
  uploadTrack,
  getTracks,
  updateTrack,
  getTrackStats,
  getTrackHistory,
  downloadTrack,
  likeTrack,
  unlikeTrack,
  deleteTrack,
  getTrackLikes,
  createTrackShare,
  initiateChunkedUpload,
  uploadChunk,
  completeChunkedUpload,
  batchDeleteTracks,
  batchUpdateTracks,
  type TrackMetadata,
  type UpdateTrackRequest,
  type TrackStats,
  type TrackHistory,
  type CreateShareRequest,
  type Share,
  type TrackLikesResponse,
  type GetTracksParams,
  type GetTracksResponse,
  type BatchDeleteRequest,
  type BatchDeleteResponse,
  type BatchUpdateRequest,
  type BatchUpdateResponse,
} from '@/features/tracks/api/trackApi';
import { getTrack } from '@/features/tracks/services/trackService';
import type { Track } from '@/features/tracks/types/track';

/**
 * Tracks API Service Object
 * Action 6.1.1.1: Exports unified tracksApi object with all track operations
 */
export const tracksApi = {
  /**
   * List tracks with pagination and filters
   */
  list: getTracks,

  /**
   * Get a single track by ID
   */
  get: getTrack,

  /**
   * Create/upload a new track
   */
  create: uploadTrack,

  /**
   * Update track metadata
   */
  update: updateTrack,

  /**
   * Delete a track
   */
  delete: deleteTrack,

  /**
   * Get track statistics
   */
  getStats: getTrackStats,

  /**
   * Get track history
   */
  getHistory: getTrackHistory,

  /**
   * Download a track
   */
  download: downloadTrack,

  /**
   * Like a track
   */
  like: likeTrack,

  /**
   * Unlike a track
   */
  unlike: unlikeTrack,

  /**
   * Get track likes information
   */
  getLikes: getTrackLikes,

  /**
   * Create a share link for a track
   */
  createShare: createTrackShare,

  /**
   * Initiate chunked upload
   */
  initiateChunkedUpload,

  /**
   * Upload a chunk
   */
  uploadChunk,

  /**
   * Complete chunked upload
   */
  completeChunkedUpload,

  /**
   * Batch delete tracks
   */
  batchDelete: batchDeleteTracks,

  /**
   * Batch update tracks
   */
  batchUpdate: batchUpdateTracks,
};

// Re-export types for convenience
export type {
  Track,
  TrackMetadata,
  UpdateTrackRequest,
  TrackStats,
  TrackHistory,
  CreateShareRequest,
  Share,
  TrackLikesResponse,
  GetTracksParams,
  GetTracksResponse,
  BatchDeleteRequest,
  BatchDeleteResponse,
  BatchUpdateRequest,
  BatchUpdateResponse,
};
