/** * Study Plan API client. */ import { apiClient } from './client'; import type { StudyPlan, StudyPlanCreate, StudyPlanUpdate, StudyPlanFull, StudyPlanStats, StudyTopic, StudyTopicCreate, StudyTopicUpdate, StudySession, StudySessionCreate, StudySessionUpdate, PlanAdjustment, WeeklySchedule, PlanGenerationRequest, PlanGenerationResult, } from '../types/study-plan'; // ============ Study Plan API ============ export async function createStudyPlan(data: StudyPlanCreate): Promise { const response = await apiClient.post('/study-plans', data); return response.data; } export async function generateStudyPlan(request: PlanGenerationRequest): Promise { const response = await apiClient.post('/study-plans/generate', request); return response.data; } export async function getStudyPlans(notebookId?: string, activeOnly = false): Promise { const params = new URLSearchParams(); if (notebookId) params.append('notebook_id', notebookId); if (activeOnly) params.append('active_only', 'true'); const response = await apiClient.get(`/study-plans?${params.toString()}`); return response.data; } export async function getTodaySessions(planId?: string): Promise { const params = planId ? `?plan_id=${encodeURIComponent(planId)}` : ''; const response = await apiClient.get(`/study-plans/today${params}`); return response.data; } export async function getStudyPlan(planId: string): Promise { const response = await apiClient.get(`/study-plans/${encodeURIComponent(planId)}`); return response.data; } export async function updateStudyPlan(planId: string, data: StudyPlanUpdate): Promise { const response = await apiClient.patch(`/study-plans/${encodeURIComponent(planId)}`, data); return response.data; } export async function deleteStudyPlan(planId: string): Promise { await apiClient.delete(`/study-plans/${encodeURIComponent(planId)}`); } export async function getStudyPlanStats(planId: string): Promise { const response = await apiClient.get(`/study-plans/${encodeURIComponent(planId)}/stats`); return response.data; } export async function getWeeklySchedule(planId: string, weekStart?: string): Promise { const params = weekStart ? `?week_start=${weekStart}` : ''; const response = await apiClient.get(`/study-plans/${encodeURIComponent(planId)}/schedule${params}`); return response.data; } // ============ Topic API ============ export async function createTopic(planId: string, data: StudyTopicCreate): Promise { const response = await apiClient.post(`/study-plans/${encodeURIComponent(planId)}/topics`, data); return response.data; } export async function getTopics(planId: string): Promise { const response = await apiClient.get(`/study-plans/${encodeURIComponent(planId)}/topics`); return response.data; } export async function getTopic(topicId: string): Promise { const response = await apiClient.get(`/study-plans/topics/${encodeURIComponent(topicId)}`); return response.data; } export async function updateTopic(topicId: string, data: StudyTopicUpdate): Promise { const response = await apiClient.patch(`/study-plans/topics/${encodeURIComponent(topicId)}`, data); return response.data; } export async function deleteTopic(topicId: string): Promise { await apiClient.delete(`/study-plans/topics/${encodeURIComponent(topicId)}`); } // ============ Session API ============ export async function createSession(planId: string, data: StudySessionCreate): Promise { const response = await apiClient.post(`/study-plans/${encodeURIComponent(planId)}/sessions`, data); return response.data; } export async function getSessions(planId: string): Promise { const response = await apiClient.get(`/study-plans/${encodeURIComponent(planId)}/sessions`); return response.data; } export async function getSession(sessionId: string): Promise { const response = await apiClient.get(`/study-plans/sessions/${encodeURIComponent(sessionId)}`); return response.data; } export async function updateSession(sessionId: string, data: StudySessionUpdate): Promise { const response = await apiClient.patch(`/study-plans/sessions/${encodeURIComponent(sessionId)}`, data); return response.data; } export async function startSession(sessionId: string): Promise { const response = await apiClient.post(`/study-plans/sessions/${encodeURIComponent(sessionId)}/start`); return response.data; } export async function completeSession( sessionId: string, rating?: number, notes?: string ): Promise { const params = new URLSearchParams(); if (rating !== undefined && rating !== null) params.append('rating', rating.toString()); if (notes) params.append('notes', notes); const response = await apiClient.post( `/study-plans/sessions/${encodeURIComponent(sessionId)}/complete?${params.toString()}` ); return response.data; } export async function skipSession(sessionId: string, reason?: string): Promise { const params = reason ? `?reason=${encodeURIComponent(reason)}` : ''; const response = await apiClient.post( `/study-plans/sessions/${encodeURIComponent(sessionId)}/skip${params}` ); return response.data; } export async function deleteSession(sessionId: string): Promise { await apiClient.delete(`/study-plans/sessions/${encodeURIComponent(sessionId)}`); } // ============ Adjustment API ============ export async function getAdjustments(planId: string): Promise { const response = await apiClient.get(`/study-plans/${encodeURIComponent(planId)}/adjustments`); return response.data; } export async function respondToAdjustment(adjustmentId: string, accepted: boolean): Promise { await apiClient.post(`/study-plans/adjustments/${encodeURIComponent(adjustmentId)}/respond`, { adjustment_id: adjustmentId, accepted, }); }