import express from 'express';
import { protect, permit } from '../middleware/auth.middleware.ts';
import { getExamResults, scoreReportsPDF } from '../controllers/examResults.controller.ts';
import { studentReportsPDF, studentPerformancePDF, getStudentStats, getInstitutionsList, getStudentPerformance,getStudentPracticeWeeklyTrend, getStudentPracticeSubjectAvg, getStudentMockWeeklyTrend, getStudentPyqWeeklyTrend, staffsReportPDF } from '../controllers/reports/individualStudentReports.controller.ts';
import { getOverallMockWeeklyTrend, getOverallPracticeWeeklyTrend, getOverallPyqWeeklyTrend, getParticularSubjectPracticeTrend, getParticularSubjectStudentTable, getStudentMockWeeklyReport, getStudentPyqWeeklyReport, getSubjectWisePracticePerformance } from '../controllers/reports/allStudentsReports.controller.ts';

const router = express.Router();

router.get('/', protect, permit("Admin", "Staff", "Institution"), getExamResults);
router.get('/score-report-pdf', protect, permit("Admin", "Staff", "Institution"), scoreReportsPDF);

// Overall students reports
router.get('/overall/practice-test-weekly', protect, permit("Admin", "Staff", "Institution"), getOverallPracticeWeeklyTrend);
router.get('/overall/practice-test-subjects', protect, permit("Admin", "Staff", "Institution"), getSubjectWisePracticePerformance);
router.get('/overall/practice-test-subject-trend', protect, permit("Admin", "Staff", "Institution"), getParticularSubjectPracticeTrend);
router.get('/overall/particular-subject-student-table', protect, permit("Admin", "Staff", "Institution"), getParticularSubjectStudentTable);

router.get('/overall/mock-test-weekly', protect, permit("Admin", "Staff", "Institution"), getOverallMockWeeklyTrend);
router.get('/overall/mock-test-student-weekly', protect, permit("Admin", "Staff", "Institution"), getStudentMockWeeklyReport);
router.get('/overall/pyq-test-weekly', protect, permit("Admin", "Staff", "Institution"), getOverallPyqWeeklyTrend);
router.get('/overall/pyq-test-student-weekly', protect, permit("Admin", "Staff", "Institution"), getStudentPyqWeeklyReport);

// Individual student reports
router.get('/institutions-list', protect, permit("Admin"), getInstitutionsList);
router.get('/students-stats', protect, permit("Admin", "Staff", "Institution"), getStudentStats);
router.get('/students/:studentId/performance', protect, permit("Admin", "Staff", "Institution"), getStudentPerformance);
router.get('/students/:studentId/performance-pdf', protect, permit("Admin", "Staff", "Institution"), studentPerformancePDF);
router.get('/students-report-pdf', protect, permit("Admin", "Staff", "Institution"), studentReportsPDF);
router.get('/staffs-report-pdf', protect, permit("Admin", "Staff", "Institution"), staffsReportPDF);
router.get('/:studentId/practice-test-weekly', protect, permit("Admin", "Staff", "Institution"), getStudentPracticeWeeklyTrend);
router.get('/:studentId/practice-test-subjects', protect, permit("Admin", "Staff", "Institution"), getStudentPracticeSubjectAvg);
router.get('/:studentId/mock-test-weekly', protect, permit("Admin", "Staff", "Institution"), getStudentMockWeeklyTrend);
router.get('/:studentId/pyq-weekly', protect, permit("Admin", "Staff", "Institution"), getStudentPyqWeeklyTrend);

export default router;
