import axios from 'axios' const api = axios.create({ baseURL: '/api/v1', timeout: 30000 }) api.interceptors.request.use(config => { const token = localStorage.getItem('par_token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }) api.interceptors.response.use( response => response.data, error => { if (error.response?.status === 401) { localStorage.removeItem('par_token') localStorage.removeItem('par_user') window.location.href = '/login' } return Promise.reject(error) } ) export default { auth: { login: (data) => api.post('/auth/login', data), register: (data) => api.post('/auth/register', data) }, sites: { list: () => api.get('/sites'), adminList: () => api.get('/admin/sites'), get: (id) => api.get(`/sites/${id}`), create: (data) => api.post('/sites', data), update: (id, data) => api.put(`/sites/${id}`, data), pendingChanges: () => api.get('/admin/sites/pending'), approveChange: (id, data) => api.post(`/admin/changes/${id}/approve`, data), rejectChange: (id) => api.post(`/admin/changes/${id}/reject`), linkChange: (id, siteId) => api.post(`/admin/changes/${id}/link`, { siteId }), changesBySite: (siteId) => api.get(`/admin/sites/${siteId}/changes`), search: (q) => api.get(`/admin/sites/search`, { params: { q } }), }, configs: { list: () => api.get('/configs'), pending: () => api.get('/configs/pending'), bySite: (siteId) => api.get(`/configs/${siteId}`), download: (siteId, version) => api.get(`/configs/${siteId}/${version}`), content: (siteId, version) => api.get(`/configs/${siteId}/${version}/content`), approve: (id, comment) => api.post(`/admin/reviews/${id}/approve`, null, { params: { comment } }), reject: (id, comment) => api.post(`/admin/reviews/${id}/reject`, null, { params: { comment } }) }, users: { list: () => api.get('/admin/accounts'), setTrustLevel: (id, level) => api.post(`/admin/accounts/${id}/trust-level`, null, { params: { level } }), }, psks: { list: () => api.get('/admin/psks'), add: (data) => api.post('/admin/psks', data), toggle: (id) => api.post(`/admin/psks/${id}/toggle`) }, logs: { list: (params) => api.get('/admin/logs', { params }), emailStats: () => api.get('/admin/logs/stats/email'), pathStats: () => api.get('/admin/logs/stats/path'), }, accessResults: { summary: () => api.get('/admin/access-results/summary'), list: () => api.get('/admin/access-results'), bySite: (siteId) => api.get(`/admin/access-results/by-site/${siteId}`), get: (id) => api.get(`/admin/access-results/${id}`), validate: (id, isValid, note) => api.post(`/admin/access-results/${id}/validate`, { isValid, note: note || '' }), batchValidate: (siteId, url, isValid) => api.post('/admin/access-results/batch-validate', { siteId, url, isValid }), delete: (id) => api.delete(`/admin/access-results/${id}`), }, adminConfigs: { pendingBySite: (siteId) => api.get(`/admin/configs/pending/${siteId}`), getContent: (configId) => api.get(`/admin/configs/${configId}/content`), updateContent: (configId, content) => api.put(`/admin/configs/${configId}/content`, { content }), getScript: (configId) => api.get(`/admin/configs/${configId}/script`), updateScript: (configId, script) => api.put(`/admin/configs/${configId}/script`, { script }), approve: (configId) => api.post(`/admin/reviews/${configId}/approve`), reject: (configId, comment) => api.post(`/admin/reviews/${configId}/reject`, null, { params: { comment: comment || '' } }), }, errorLogs: { list: () => api.get('/admin/error-logs'), bySite: (siteId) => api.get(`/admin/error-logs/by-site/${siteId}`), get: (id) => api.get(`/admin/error-logs/${id}`), }, adapter: { parse: (configId, accessResultId) => api.post('/admin/adapter/parse', { configId, accessResultId }), parseBatch: (configId, siteId) => api.post('/admin/adapter/parse-batch', { configId, siteId }), }, health: () => api.get('/health', { baseURL: '' }) }