from flask_smorest import Blueprint
from src.views.admin.utils import AdminManager
from flask.views import MethodView
from flask import request, jsonify, send_file, Response
from werkzeug.utils import secure_filename
import os
import io
from src.models.schema import AdminLoginSchema, OTPVerifySchema
from src.utils import custom_response

admin_router = Blueprint("Admin manager routes", __name__)


@admin_router.route('/admin/login')
class AuthLoginRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.arguments(schema=AdminLoginSchema, location='json')
    @admin_router.response(status_code=200)
    def post(self, payload):
        """User login"""
        return self.admin_manager.login(payload)


@admin_router.route('/admin/auth/verify')
class AuthLoginRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        """User login"""
        return self.admin_manager.verify_auth_token()
    

@admin_router.route("/admin/otp/verify")
class AuthOTPVerifyRouter(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.arguments(schema=OTPVerifySchema, location='json')
    @admin_router.response(status_code=200)
    def post(self, payload):
        """Verify OTP for 2FA"""
        return self.user_manager.verify_otp(payload)

@admin_router.route("/tutor/base/analysis")
class AuthOTPVerifyRouter(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        return self.user_manager.get_tutor_analysis()
    
@admin_router.route("/supervisor/base/analysis")
class SupervisorBaseAnalysis(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        return self.user_manager.get_supervisor_analysis()
    
@admin_router.route("/student/base/analysis")
class StudentBaseAnalysis(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        return self.user_manager.get_student_analysis()
    

@admin_router.route("/admin/supervisors")
class SupervisorsData(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        return self.user_manager.get_all_supervisors_data()

@admin_router.route("/admin/department")
class AdminDepartment(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        return self.user_manager.get_departments_data()
    

@admin_router.route("/admin/dashboard")
class AdminDashboard(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        return self.user_manager.get_dashboard_data()
    

@admin_router.route("/admin/modules")
class AdminModules(MethodView):
    def __init__(self) -> None:
        self.user_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        """Get all course modules with pagination and filtering"""
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 20, type=int)
        search = request.args.get('search', '', type=str)
        course_filter = request.args.get('course_filter', 'all', type=str)
        status_filter = request.args.get('status_filter', 'all', type=str)
        
        return self.user_manager.fetchModules(
            page=page,
            per_page=per_page,
            search=search,
            course_filter=course_filter,
            status_filter=status_filter
        )
    


@admin_router.route("/admin/units/")
class AdminCourseRouter(MethodView):
    def __init__(self) -> None:
        self.course_manager = AdminManager()

    def get(self):
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 10, type=int)
        search = request.args.get('search', '', type=str)
        status_filter = request.args.get('status', 'all', type=str)
            
        return self.course_manager.fetchUnits(page, per_page, search, status_filter)


@admin_router.route("/admin/resources")
class AdminResourcesRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get all learning resources with pagination and filtering"""
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 20, type=int)
        search = request.args.get('search', '', type=str)
        type_filter = request.args.get('type_filter', 'all', type=str)
        module_filter = request.args.get('module_filter', 'all', type=str)
        status_filter = request.args.get('status_filter', 'all', type=str)
        
        return self.admin_manager.fetchLearningResources(
            page=page,
            per_page=per_page,
            search=search,
            type_filter=type_filter,
            module_filter=module_filter,
            status_filter=status_filter
        )

    def post(self):
        """Create a new learning resource"""
        resource_data = request.get_json()
        return self.admin_manager.createResource(resource_data)


@admin_router.route("/admin/resources/<string:resource_id>")
class AdminResourceDetailRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def put(self, resource_id):
        """Update a learning resource"""
        resource_data = request.get_json()
        return self.admin_manager.updateResource(resource_id, resource_data)

    def delete(self, resource_id):
        """Delete a learning resource"""
        return self.admin_manager.deleteResource(resource_id)


@admin_router.route("/admin/resources/<string:resource_id>/toggle-status")
class AdminResourceStatusRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def patch(self, resource_id):
        """Toggle the published status of a resource"""
        data = request.get_json()
        is_published = data.get('is_published', False)
        return self.admin_manager.toggleResourceStatus(resource_id, is_published)


@admin_router.route("/admin/resources/upload")
class AdminResourceUploadRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def post(self):
        """Upload a file for a resource"""
        file_data = request.files
        return self.admin_manager.uploadResourceFile(file_data)


@admin_router.route("/admin/enrollments")
class AdminEnrollmentsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get all enrollments with pagination and filtering"""
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 20, type=int)
        search = request.args.get('search', '', type=str)
        status_filter = request.args.get('status_filter', 'all', type=str)
        course_filter = request.args.get('course_filter', 'all', type=str)
        semester_filter = request.args.get('semester_filter', 'all', type=str)

        return self.admin_manager.fetchEnrollments(
            page=page,
            per_page=per_page,
            search=search,
            status_filter=status_filter,
            course_filter=course_filter,
            semester_filter=semester_filter
        )

    def post(self):
        """Create a new enrollment"""
        enrollment_data = request.get_json()
        return self.admin_manager.createEnrollment(enrollment_data)

@admin_router.route("/admin/enrollments/<string:enrollment_id>")
class AdminEnrollmentDetailRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def put(self, enrollment_id):
        """Update an enrollment"""
        enrollment_data = request.get_json()
        return self.admin_manager.updateEnrollment(enrollment_id, enrollment_data)

    def delete(self, enrollment_id):
        """Delete an enrollment"""
        return self.admin_manager.deleteEnrollment(enrollment_id)

@admin_router.route("/admin/students/bulk-upload")
class AdminBulkStudentUploadRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def post(self):
        """Bulk upload students from Excel file"""
        if 'file' not in request.files:
            return {"success": False, "data": "No file uploaded", "message": "Please upload an Excel file"}, 400
        
        file = request.files['file']
        if file.filename == '':
            return {"success": False, "data": "No file selected", "message": "Please select a file"}, 400
        
        # Check file extension
        if not file.filename.endswith(('.xlsx', '.xls')):
            return {"success": False, "data": "Invalid file format", "message": "Please upload an Excel file (.xlsx or .xls)"}, 400
        
        return self.admin_manager.bulk_upload_students(file)
    
    @admin_router.response(status_code=200)
    def get(self):
        """Download Excel template for bulk student upload"""
        return self.admin_manager.generate_student_upload_template()

@admin_router.route("/admin/enrollments/students")
class AdminEnrollmentStudentsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get all students for enrollment dropdown"""
        return self.admin_manager.getStudentsForEnrollment()

@admin_router.route("/admin/enrollments/courses")
class AdminEnrollmentCoursesRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get all courses for enrollment dropdown"""
        return self.admin_manager.getCoursesForEnrollment()

@admin_router.route("/admin/enrollments/template")
class AdminEnrollmentTemplateRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Download enrollment template"""
        return self.admin_manager.downloadEnrollmentTemplate()

@admin_router.route("/admin/enrollments/bulk")
class AdminBulkEnrollmentRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def post(self):
        """Process bulk enrollment from uploaded file"""
        if 'file' not in request.files:
            return jsonify({'success': False, 'message': 'No file uploaded'}), 400
        
        file = request.files['file']
        if file.filename == '':
            return jsonify({'success': False, 'message': 'No file selected'}), 400
        
        # Save uploaded file temporarily
        filename = secure_filename(file.filename)
        filepath = os.path.join('uploads', 'temp', filename)
        os.makedirs(os.path.dirname(filepath), exist_ok=True)
        file.save(filepath)
        
        try:
            result = self.admin_manager.bulkEnrollStudents(filepath)
            # Clean up temporary file
            os.remove(filepath)
            return result
        except Exception as e:
            # Clean up temporary file
            if os.path.exists(filepath):
                os.remove(filepath)
            return jsonify({'success': False, 'message': str(e)}), 400

@admin_router.route("/admin/enrollments/stats")
class AdminEnrollmentStatsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get enrollment statistics"""
        return self.admin_manager.getEnrollmentStats()

@admin_router.route("/admin/reports/enrollment-analytics")
class AdminEnrollmentAnalyticsRouter(MethodView):
    def __init__(self) -> None:
        from src.views.reports.enrollment import EnrollmentReportsManager
        self.enrollment_manager = EnrollmentReportsManager()

    def get(self):
        """Get comprehensive enrollment analytics"""
        try:
            period = request.args.get('period', '30d')
            start_date = request.args.get('start_date')
            end_date = request.args.get('end_date')
            department = request.args.get('department')
            course_id = request.args.get('course_id')
            
            result = self.enrollment_manager.get_enrollment_analytics(
                period=period,
                start_date=start_date,
                end_date=end_date,
                department=department,
                course_id=course_id
            )
            return result
            
        except Exception as e:
            return custom_response(
                success=False,
                data={'error': f"Error retrieving enrollment analytics: {str(e)}"},
                status_code=500
            )

@admin_router.route("/admin/reports/enrollment-analytics/export")
class AdminEnrollmentAnalyticsExportRouter(MethodView):
    def __init__(self) -> None:
        from src.views.reports.enrollment import EnrollmentReportsManager
        self.enrollment_manager = EnrollmentReportsManager()

    def get(self):
        """Export enrollment analytics data to CSV or Excel"""
        try:
            period = request.args.get('period', '30d')
            format_type = request.args.get('format', 'csv')
            
            result = self.enrollment_manager.export_enrollment_data(period, format_type)
            
            if result.data.get('success'):
                from flask import make_response
                return make_response(
                    result.data.get('content', ''),
                    200,
                    {
                        'Content-Type': result.data.get('content_type', 'text/csv'),
                        'Content-Disposition': f'attachment; filename="{result.data.get("filename", "export.csv")}"'
                    }
                )
            else:
                return result
            
        except Exception as e:
            return custom_response(
                success=False,
                data={'error': f"Error exporting enrollment analytics data: {str(e)}"},
                status_code=500
            )

# Teaching Sessions Routes
@admin_router.route("/admin/teaching-sessions")
class AdminTeachingSessionsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get teaching sessions with pagination and filters"""
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 20, type=int)
        search = request.args.get('search', '', type=str)
        status = request.args.get('status', 'all', type=str)
        course_id = request.args.get('course_id', 'all', type=str)
        tutor_id = request.args.get('tutor_id', 'all', type=str)
        session_type = request.args.get('session_type', 'all', type=str)
        date_filter = request.args.get('date_filter', 'all', type=str)
        
        return self.admin_manager.fetchTeachingSessions(
            page=page, per_page=per_page, search=search, status=status,
            course_id=course_id, tutor_id=tutor_id, session_type=session_type,
            date_filter=date_filter
        )

@admin_router.route("/admin/teaching-sessions/<string:session_id>")
class AdminTeachingSessionDetailRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self, session_id):
        """Get detailed teaching session information"""
        return self.admin_manager.getTeachingSessionDetail(session_id)

@admin_router.route("/admin/teaching-sessions/stats")
class AdminTeachingSessionStatsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get teaching session statistics"""
        return self.admin_manager.getTeachingSessionStats()

# Attendance Records Routes
@admin_router.route("/admin/attendance-records")
class AdminAttendanceRecordsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get attendance records with pagination and filters"""
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 20, type=int)
        search = request.args.get('search', '', type=str)
        status = request.args.get('status', 'all', type=str)
        tutor_id = request.args.get('tutor_id', 'all', type=str)
        date_filter = request.args.get('date_filter', 'all', type=str)
        verified = request.args.get('verified', 'all', type=str)
        
        return self.admin_manager.fetchAttendances(
            page=page, per_page=per_page, search=search, status=status,
            tutor_id=tutor_id, date_filter=date_filter, verified=verified
        )

    def post(self):
        """Create a new attendance record"""
        data = request.get_json()
        tutor_id = data.get('tutor_id')
        session_id = data.get('session_id')
        student_id = data.get('student_id')
        status = data.get('status', 'present')
        notes = data.get('notes')
        late_minutes = data.get('late_minutes', 0)
        verification_method = data.get('verification_method')
        device_used = data.get('device_used')
        ip_address = data.get('ip_address')
        
        if not all([tutor_id, session_id, student_id]):
            return jsonify({
                'success': False,
                'message': 'Missing required fields: tutor_id, session_id, student_id'
            }), 400
        
        return self.admin_manager.createAttendance(
            tutor_id=tutor_id, session_id=session_id, student_id=student_id,
            status=status, notes=notes, late_minutes=late_minutes,
            verification_method=verification_method, device_used=device_used,
            ip_address=ip_address
        )

@admin_router.route("/admin/attendance-records/<string:record_id>")
class AdminAttendanceRecordDetailRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self, record_id):
        """Get detailed attendance record information"""
        return self.admin_manager.getAttendanceDetail(record_id)

    def put(self, record_id):
        """Update an attendance record"""
        data = request.get_json()
        status = data.get('status')
        notes = data.get('notes')
        late_minutes = data.get('late_minutes')
        verification_method = data.get('verification_method')
        supervisor_tutor_id = data.get('supervisor_tutor_id')
        
        return self.admin_manager.updateAttendance(
            record_id=record_id, status=status, notes=notes,
            late_minutes=late_minutes, verification_method=verification_method,
            supervisor_tutor_id=supervisor_tutor_id
        )

    def delete(self, record_id):
        """Delete an attendance record"""
        return self.admin_manager.deleteAttendance(record_id)

@admin_router.route("/admin/attendance-records/stats")
class AdminAttendanceStatsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get attendance statistics"""
        return self.admin_manager.getAttendanceStats()

@admin_router.route("/admin/verification-logs")
class AdminVerificationLogsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get verification logs with pagination and filters"""
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 20, type=int)
        search = request.args.get('search', '')
        verification_method = request.args.get('verification_method', 'all')
        tutor_id = request.args.get('tutor_id', 'all')
        student_id = request.args.get('student_id', 'all')
        date_filter = request.args.get('date_filter', 'all')
        status = request.args.get('status', 'all')
        
        return self.admin_manager.fetchVerificationLogs(
            page=page, per_page=per_page, search=search,
            verification_method=verification_method, tutor_id=tutor_id,
            student_id=student_id, date_filter=date_filter, status=status
        )

@admin_router.route("/admin/verification-logs/<string:log_id>")
class AdminVerificationLogDetailRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self, log_id):
        """Get detailed verification log information"""
        return self.admin_manager.getVerificationLogDetail(log_id)

@admin_router.route("/admin/verification-logs/stats")
class AdminVerificationLogStatsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get verification log statistics"""
        return self.admin_manager.getVerificationLogStats()

@admin_router.route("/admin/attendance-analytics")
class AdminAttendanceAnalyticsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get comprehensive attendance analytics"""
        start_date = request.args.get('start_date', type=str)
        end_date = request.args.get('end_date', type=str)
        tutor_id = request.args.get('tutor_id', type=str)
        course_id = request.args.get('course_id', type=str)
        department = request.args.get('department', type=str)

        analytics = self.admin_manager.getAttendanceAnalytics(
            start_date=start_date,
            end_date=end_date,
            tutor_id=tutor_id,
            course_id=course_id,
            department=department
        )

        return analytics

@admin_router.route("/admin/academic-sessions")
class AdminAcademicSessionsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get academic sessions with pagination and filters"""
        page = request.args.get('page', 1, type=int)
        per_page = request.args.get('per_page', 20, type=int)
        search = request.args.get('search', type=str)
        status = request.args.get('status', type=str)
        speciality_id = request.args.get('speciality_id', type=str)
        year = request.args.get('year', type=str)

        return self.admin_manager.fetchAcademicSessions(
            page=page,
            per_page=per_page,
            search=search,
            status=status,
            speciality_id=speciality_id,
            year=year
        )

    def post(self):
        """Create a new academic session"""
        session_data = request.get_json()
        return self.admin_manager.createAcademicSession(session_data)

@admin_router.route("/admin/academic-sessions/<string:session_id>")
class AdminAcademicSessionDetailRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def put(self, session_id):
        """Update an academic session"""
        session_data = request.get_json()
        return self.admin_manager.updateAcademicSession(session_id, session_data)

    def delete(self, session_id):
        """Delete an academic session"""
        return self.admin_manager.deleteAcademicSession(session_id)

@admin_router.route("/admin/academic-sessions/specialities")
class AdminAcademicSessionSpecialitiesRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get all specialities for academic session creation"""
        return self.admin_manager.getSpecialitiesForSessions()

@admin_router.route("/admin/academic-sessions/stats")
class AdminAcademicSessionStatsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Get academic session statistics"""
        return self.admin_manager.getAcademicSessionStats()

@admin_router.route("/admin/attendance-reports/export")
class AdminAttendanceReportExportRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    def get(self):
        """Export attendance report"""
        start_date = request.args.get('start_date', type=str)
        end_date = request.args.get('end_date', type=str)
        tutor_id = request.args.get('tutor_id', type=str)
        course_id = request.args.get('course_id', type=str)
        department = request.args.get('department', type=str)
        format_type = request.args.get('format', 'excel', type=str)

        report_data = self.admin_manager.exportAttendanceReport(
            start_date=start_date,
            end_date=end_date,
            tutor_id=tutor_id,
            course_id=course_id,
            department=department,
            format=format_type
        )

        if report_data:
            if format_type == 'excel':
                return send_file(
                    io.BytesIO(report_data),
                    mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
                    as_attachment=True,
                    download_name=f'attendance_report_{start_date or "all"}_{end_date or "all"}.xlsx'
                )
            elif format_type == 'csv':
                return Response(
                    report_data,
                    mimetype='text/csv',
                    headers={'Content-Disposition': f'attachment; filename=attendance_report_{start_date or "all"}_{end_date or "all"}.csv'}
                )
        else:
            return custom_response(
                data={'message': 'Failed to generate report'},
                status_code=500,
                success=False
            )


@admin_router.route("/admin/accounts/locked")
class AdminLockedAccountsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        """Get list of all locked admin accounts"""
        return self.admin_manager.get_locked_admin_accounts()


@admin_router.route("/admin/accounts/unlock")
class AdminUnlockAccountRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def post(self):
        """Unlock a locked admin account"""
        payload = request.get_json()
        return self.admin_manager.unlock_admin_account(payload)


# Admin Password Management Routes
@admin_router.route("/admin/password/update")
class AdminPasswordUpdateRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def post(self):
        """Update admin password with current password verification"""
        payload = request.get_json()
        admin_email = payload.get('admin_email')
        new_password = payload.get('new_password')
        current_password = payload.get('current_password')
        require_current_password = payload.get('require_current_password', True)
        
        if not admin_email or not new_password:
            return custom_response(
                success=False,
                data="Missing required fields: admin_email, new_password",
                status_code=400
            )
        
        return self.admin_manager.update_admin_password(
            admin_email=admin_email,
            new_password=new_password,
            current_password=current_password,
            require_current_password=require_current_password
        )


@admin_router.route("/admin/password/reset")
class AdminPasswordResetRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def post(self):
        """Reset admin password without current password (system use)"""
        payload = request.get_json()
        admin_email = payload.get('admin_email')
        new_password = payload.get('new_password')
        
        if not admin_email or not new_password:
            return custom_response(
                success=False,
                data="Missing required fields: admin_email, new_password",
                status_code=400
            )
        
        return self.admin_manager.reset_admin_password(
            admin_email=admin_email,
            new_password=new_password
        )


@admin_router.route("/admin/password/reset-token")
class AdminPasswordResetTokenRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def post(self):
        """Generate password reset token for admin"""
        payload = request.get_json()
        admin_email = payload.get('admin_email')
        
        if not admin_email:
            return custom_response(
                success=False,
                data="Missing required field: admin_email",
                status_code=400
            )
        
        return self.admin_manager.generate_admin_password_reset_token(
            admin_email=admin_email
        )


@admin_router.route("/admin/tutor-workload-analysis")
class TutorWorkloadAnalysisRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        """Get comprehensive tutor workload analysis based on course credits"""
        return self.admin_manager.get_tutor_workload_analysis()


@admin_router.route("/analytics/courses")
class CourseAnalyticsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        """Get comprehensive course analytics including enrollments and speciality data"""
        return self.admin_manager.get_course_analytics()


@admin_router.route("/attendance/analytics")
class AttendanceAnalyticsRouter(MethodView):
    def __init__(self) -> None:
        self.admin_manager = AdminManager()

    @admin_router.response(status_code=200)
    def get(self):
        """Get comprehensive attendance analytics with visualizations and insights"""
        return self.admin_manager.get_attendance_analytics()
