import apiClient from './client';
import type {
  StudentProgress,
  WeeklyActivity,
  MonthlyProgress,
  ChapterProgress,
  Achievement,
  LeaderboardEntry,
  DashboardStats,
  MurojaahSession,
  ApiResponse,
} from '@/types';

export const progressApi = {
  getDashboardStats: async () => {
    const response = await apiClient.get<ApiResponse<DashboardStats>>('/student/dashboard');
    return response.data.data;
  },

  getProgress: async () => {
    const response = await apiClient.get<ApiResponse<StudentProgress>>('/student/progress');
    return response.data.data;
  },

  getWeeklyActivity: async () => {
    const response = await apiClient.get<ApiResponse<WeeklyActivity[]>>(
      '/student/progress/weekly'
    );
    return response.data.data;
  },

  getMonthlyProgress: async () => {
    const response = await apiClient.get<ApiResponse<MonthlyProgress[]>>(
      '/student/progress/monthly'
    );
    return response.data.data;
  },

  getChapterProgress: async () => {
    const response = await apiClient.get<ApiResponse<ChapterProgress[]>>(
      '/student/progress/chapters'
    );
    return response.data.data;
  },

  getAchievements: async () => {
    const response = await apiClient.get<ApiResponse<Achievement[]>>('/student/achievements');
    return response.data.data;
  },

  getLeaderboard: async () => {
    const response = await apiClient.get<ApiResponse<LeaderboardEntry[]>>('/leaderboard');
    return response.data.data;
  },

  // Murojaah
  startMurojaah: async () => {
    const response = await apiClient.post<ApiResponse<MurojaahSession>>('/murojaah/start');
    return response.data.data;
  },

  submitMurojaah: async (sessionId: string, audio: Blob) => {
    const formData = new FormData();
    formData.append('audio', audio);
    const response = await apiClient.post<ApiResponse<MurojaahSession>>(
      `/murojaah/${sessionId}/submit`,
      formData,
      { headers: { 'Content-Type': 'multipart/form-data' } }
    );
    return response.data.data;
  },

  getMurojaahStats: async () => {
    const response = await apiClient.get<ApiResponse<{
      totalSessions: number;
      averageScore: number;
      bestScore: number;
      totalTime: number;
    }>>('/murojaah/stats');
    return response.data.data;
  },
};
