import axios from 'axios'; const API_BASE = '/api'; const api = axios.create({ baseURL: API_BASE, headers: { 'Content-Type': 'application/json' }, }); // Attach JWT token to every request api.interceptors.request.use((config) => { const token = localStorage.getItem('director_token'); if (token && config.headers) { config.headers.Authorization = `Bearer ${token}`; } return config; }); // Handle 401 responses globally api.interceptors.response.use( (response) => response, (error) => { if (error.response?.status === 401) { localStorage.removeItem('director_token'); localStorage.removeItem('director_user'); window.location.href = '/login'; } return Promise.reject(error); } ); // Auth export const authAPI = { register: (email: string, password: string) => api.post('/auth/register', { email, password }), login: (email: string, password: string) => api.post('/auth/login', { email, password }), }; // Projects export const projectsAPI = { list: () => api.get('/projects'), get: (id: string) => api.get(`/projects/${id}`), create: (data: { name: string; defaultPlatform: string; defaultFormat: string }) => api.post('/projects', data), delete: (id: string) => api.delete(`/projects/${id}`), }; // Videos export const videosAPI = { create: (projectId: string, data: any) => api.post(`/videos/${projectId}`, data), get: (id: string) => api.get(`/videos/${id}`), generate: (id: string) => api.post(`/videos/${id}/generate`), status: (id: string) => api.get(`/videos/${id}/status`), export: (id: string, data: { formats: string[]; quality: string }) => api.post(`/videos/${id}/export`, data), }; // Presets export const presetsAPI = { list: () => api.get('/presets'), create: (data: any) => api.post('/presets', data), update: (id: string, data: any) => api.put(`/presets/${id}`, data), delete: (id: string) => api.delete(`/presets/${id}`), }; // Assets export const assetsAPI = { upload: (files: FileList | File[]) => { const formData = new FormData(); Array.from(files).forEach((file) => formData.append('files', file)); return api.post('/assets/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' }, }); }, }; export default api;