import { defineStore } from 'pinia'; import { instructorService } from '~/services/instructor.service'; interface Course { id: number; title: string; students: number; lessons: number; icon: string; thumbnail: string | null; } interface DashboardStats { totalCourses: number; totalStudents: number; completedStudents: number; } interface CourseStatusCounts { approved: number; pending: number; draft: number; rejected: number; } export const useInstructorStore = defineStore('instructor', { state: () => ({ stats: { totalCourses: 0, totalStudents: 0, completedStudents: 0 } as DashboardStats, courseStatusCounts: { approved: 0, pending: 0, draft: 0, rejected: 0 } as CourseStatusCounts, recentCourses: [] as Course[], loading: false }), getters: { getDashboardStats: (state) => state.stats, getRecentCourses: (state) => state.recentCourses }, actions: { async fetchDashboardData() { this.loading = true; try { // Fetch courses and student stats in parallel const [courses, studentStats] = await Promise.all([ instructorService.getCourses(), instructorService.getMyStudentsStats() ]); // Update student stats from dedicated API this.stats.totalCourses = courses.length; this.stats.totalStudents = studentStats.total_students; this.stats.completedStudents = studentStats.total_completed; // Update course status counts this.courseStatusCounts = { approved: courses.filter(c => c.status === 'APPROVED').length, pending: courses.filter(c => c.status === 'PENDING').length, draft: courses.filter(c => c.status === 'DRAFT').length, rejected: courses.filter(c => c.status === 'REJECTED').length }; // Build recent courses list (first 3) from existing data this.recentCourses = courses.slice(0, 3).map(course => ({ id: course.id, title: course.title.th, students: 0, lessons: 0, icon: 'book', thumbnail: course.thumbnail_url || null })); } catch (error) { console.error('Failed to fetch dashboard data:', error); } finally { this.loading = false; } } } });