/**
 * 用户学习进度 API
 */
import { request } from '@/utils/request'

// ============ 类型定义 ============

export interface MaterialProgress {
  material_id: number
  material_name: string
  is_completed: boolean
  progress_percent: number
  last_position: number
  study_time: number
  first_accessed_at: string | null
  last_accessed_at: string | null
  completed_at: string | null
}

export interface CourseProgress {
  course_id: number
  course_name: string
  status: 'not_started' | 'in_progress' | 'completed'
  progress_percent: number
  completed_materials: number
  total_materials: number
  total_study_time: number
  first_accessed_at: string | null
  last_accessed_at: string | null
  completed_at: string | null
  materials?: MaterialProgress[]
}

export interface ProgressSummary {
  total_courses: number
  completed_courses: number
  in_progress_courses: number
  not_started_courses: number
  total_study_time: number
  average_progress: number
}

export interface MaterialProgressUpdate {
  progress_percent: number
  last_position?: number
  study_time_delta?: number
  is_completed?: boolean
}

// ============ API 方法 ============

/**
 * 获取学习进度摘要
 */
export const getProgressSummary = () => {
  return request.get<ProgressSummary>('/api/v1/progress/summary')
}

/**
 * 获取所有课程学习进度
 */
export const getAllCourseProgress = (status?: string) => {
  return request.get<CourseProgress[]>('/api/v1/progress/courses', {
    params: status ? { status } : undefined,
  })
}

/**
 * 获取指定课程的详细学习进度
 */
export const getCourseProgress = (courseId: number) => {
  return request.get<CourseProgress>(`/api/v1/progress/courses/${courseId}`)
}

/**
 * 更新资料学习进度
 */
export const updateMaterialProgress = (
  materialId: number,
  data: MaterialProgressUpdate
) => {
  return request.post<MaterialProgress>(
    `/api/v1/progress/materials/${materialId}`,
    data
  )
}

/**
 * 标记资料为已完成
 */
export const markMaterialComplete = (materialId: number) => {
  return request.post<MaterialProgress>(
    `/api/v1/progress/materials/${materialId}/complete`
  )
}

/**
 * 开始学习课程
 */
export const startCourse = (courseId: number) => {
  return request.post(`/api/v1/progress/courses/${courseId}/start`)
}

/**
 * 格式化学习时长
 */
export const formatStudyTime = (seconds: number): string => {
  if (seconds < 60) {
    return `${seconds}秒`
  }
  if (seconds < 3600) {
    const minutes = Math.floor(seconds / 60)
    return `${minutes}分钟`
  }
  const hours = Math.floor(seconds / 3600)
  const minutes = Math.floor((seconds % 3600) / 60)
  return minutes > 0 ? `${hours}小时${minutes}分钟` : `${hours}小时`
}

/**
 * 获取进度状态文本
 */
export const getProgressStatusText = (
  status: 'not_started' | 'in_progress' | 'completed'
): string => {
  const statusMap = {
    not_started: '未开始',
    in_progress: '学习中',
    completed: '已完成',
  }
  return statusMap[status] || status
}

/**
 * 获取进度状态颜色
 */
export const getProgressStatusType = (
  status: 'not_started' | 'in_progress' | 'completed'
): 'info' | 'warning' | 'success' => {
  const typeMap: Record<string, 'info' | 'warning' | 'success'> = {
    not_started: 'info',
    in_progress: 'warning',
    completed: 'success',
  }
  return typeMap[status] || 'info'
}

export default {
  getProgressSummary,
  getAllCourseProgress,
  getCourseProgress,
  updateMaterialProgress,
  markMaterialComplete,
  startCourse,
  formatStudyTime,
  getProgressStatusText,
  getProgressStatusType,
}
