import { Media } from '../../types'; import { ApiResponse, PaginatedResponse, ApiMediaItem, CreateMediaInput, UpdateMediaInput } from './types'; import { convertApiToMedia } from './converters'; const BASE_URL = import.meta.env.VITE_API_URL; export async function fetchAllMedia(page: number = 1, limit: number = 10000): Promise { try { const response = await fetch(`${BASE_URL}/api/media?page=${page}&limit=${limit}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data: ApiResponse> = await response.json(); if (data.success && data.data.items) { return data.data.items.map(convertApiToMedia); } return []; } catch (error) { console.error('Error fetching media from API:', error); return []; } } export async function fetchMediaById(id: number | string): Promise { try { const response = await fetch(`${BASE_URL}/api/media/${id}`); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data: ApiResponse = await response.json(); if (data.success && data.data) { return convertApiToMedia(data.data); } return null; } catch (error) { console.error('Error fetching media by ID:', error); return null; } } export async function createMedia(media: CreateMediaInput): Promise { try { const response = await fetch(`${BASE_URL}/api/media`, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(media), }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data: ApiResponse = await response.json(); if (data.success && data.data) { return convertApiToMedia(data.data); } return null; } catch (error) { console.error('Error creating media:', error); return null; } } export async function updateMedia(id: number | string, media: UpdateMediaInput): Promise { try { const response = await fetch(`${BASE_URL}/api/media/${id}`, { method: 'PUT', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(media), }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data: ApiResponse = await response.json(); if (data.success && data.data) { return convertApiToMedia(data.data); } return null; } catch (error) { console.error('Error updating media:', error); return null; } } export async function deleteMedia(id: number | string): Promise { try { const response = await fetch(`${BASE_URL}/api/media/${id}`, { method: 'DELETE', }); if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); } const data: ApiResponse<{ message: string }> = await response.json(); return data.success; } catch (error) { console.error('Error deleting media:', error); return false; } }