import { z } from 'zod';
import type { LessonDetailsData, RecommendedClassApiResponse, RecommendedClassDetailsApiResponse, RecommendedClassHistoryApiResponse } from '../types/recommendedLessons';
/**
 * Schema for /recommendedClass/{id} API response
 */
export declare const recommendedClassApiResponseSchema: z.ZodObject<{
    message: z.ZodString;
    data: z.ZodObject<{
        id: z.ZodString;
        title: z.ZodString;
        startDate: z.ZodString;
        finalDate: z.ZodString;
        progress: z.ZodNumber;
        lessons: z.ZodArray<z.ZodObject<{
            recommendedClassId: z.ZodString;
            supLessonsProgressId: z.ZodString;
            supLessonsProgress: z.ZodObject<{
                id: z.ZodString;
                userId: z.ZodString;
                lessonId: z.ZodString;
                progress: z.ZodNumber;
                lesson: z.ZodObject<{
                    id: z.ZodString;
                    content: z.ZodObject<{
                        id: z.ZodString;
                        name: z.ZodString;
                    }, z.core.$strip>;
                    subtopic: z.ZodObject<{
                        id: z.ZodString;
                        name: z.ZodString;
                    }, z.core.$strip>;
                    topic: z.ZodObject<{
                        id: z.ZodString;
                        name: z.ZodString;
                    }, z.core.$strip>;
                    subject: z.ZodObject<{
                        id: z.ZodString;
                        name: z.ZodString;
                        color: z.ZodString;
                        icon: z.ZodString;
                    }, z.core.$strip>;
                }, z.core.$strip>;
            }, z.core.$strip>;
        }, z.core.$strip>>;
    }, z.core.$strip>;
}, z.core.$strip>;
/**
 * Schema for /recommendedClass/{id}/details API response
 */
export declare const recommendedClassDetailsApiResponseSchema: z.ZodObject<{
    message: z.ZodString;
    data: z.ZodObject<{
        students: z.ZodArray<z.ZodObject<{
            userInstitutionId: z.ZodString;
            userId: z.ZodString;
            name: z.ZodString;
            progress: z.ZodNumber;
            completedAt: z.ZodNullable<z.ZodString>;
            avgScore: z.ZodNullable<z.ZodNumber>;
            daysToComplete: z.ZodNullable<z.ZodNumber>;
        }, z.core.$strip>>;
        aggregated: z.ZodObject<{
            completionPercentage: z.ZodNumber;
            avgScore: z.ZodNullable<z.ZodNumber>;
        }, z.core.$strip>;
        contentPerformance: z.ZodObject<{
            best: z.ZodNullable<z.ZodObject<{
                contentId: z.ZodString;
                contentName: z.ZodString;
                rate: z.ZodNumber;
            }, z.core.$strip>>;
            worst: z.ZodNullable<z.ZodObject<{
                contentId: z.ZodString;
                contentName: z.ZodString;
                rate: z.ZodNumber;
            }, z.core.$strip>>;
        }, z.core.$strip>;
    }, z.core.$strip>;
}, z.core.$strip>;
/**
 * Schema for history API response (partial)
 */
export declare const historyApiResponseSchema: z.ZodObject<{
    message: z.ZodString;
    data: z.ZodObject<{
        recommendedClass: z.ZodArray<z.ZodObject<{
            recommendedClass: z.ZodObject<{
                id: z.ZodString;
            }, z.core.$strip>;
            breakdown: z.ZodArray<z.ZodObject<{
                classId: z.ZodString;
                className: z.ZodString;
                schoolId: z.ZodString;
                schoolName: z.ZodString;
                studentCount: z.ZodNumber;
                completedCount: z.ZodNumber;
            }, z.core.$strip>>;
        }, z.core.$strip>>;
        total: z.ZodNumber;
    }, z.core.$strip>;
}, z.core.$strip>;
/**
 * Hook state interface
 */
export interface UseRecommendedLessonDetailsState {
    data: LessonDetailsData | null;
    loading: boolean;
    error: string | null;
}
/**
 * Hook return type
 */
export interface UseRecommendedLessonDetailsReturn extends UseRecommendedLessonDetailsState {
    refetch: () => Promise<void>;
}
/**
 * API client interface for fetching lesson details
 */
export interface LessonDetailsApiClient {
    /** Fetch recommendedClass metadata from /recommendedClass/{id} */
    fetchRecommendedClass: (id: string) => Promise<RecommendedClassApiResponse>;
    /** Fetch recommendedClass details from /recommendedClass/{id}/details */
    fetchRecommendedClassDetails: (id: string) => Promise<RecommendedClassDetailsApiResponse>;
    /** Optional: Fetch breakdown from /recommended-class/history */
    fetchBreakdown?: (id: string) => Promise<RecommendedClassHistoryApiResponse>;
}
/**
 * Handle errors during lesson details fetch
 * @param error - Error object
 * @returns Error message for UI display
 */
export declare const handleLessonDetailsFetchError: (error: unknown) => string;
/**
 * Factory function to create useRecommendedLessonDetails hook
 *
 * @param apiClient - Object containing API fetch functions
 * @returns Hook for managing recommended lesson details
 *
 * @example
 * ```tsx
 * // In your app setup
 * const apiClient = {
 *   fetchRecommendedClass: async (id) => {
 *     const response = await api.get(`/recommendedClass/${id}`);
 *     return response.data;
 *   },
 *   fetchRecommendedClassDetails: async (id) => {
 *     const response = await api.get(`/recommendedClass/${id}/details`);
 *     return response.data;
 *   },
 *   fetchBreakdown: async (id) => {
 *     const response = await api.get(`/recommended-class/history?search=${id}&limit=1`);
 *     return response.data;
 *   },
 * };
 *
 * const useRecommendedClassDetails = createUseRecommendedLessonDetails(apiClient);
 *
 * // In your component
 * const { data, loading, error, refetch } = useRecommendedClassDetails('recommendedClass-id-123');
 * ```
 */
export declare const createUseRecommendedLessonDetails: (apiClient: LessonDetailsApiClient) => (lessonId: string | undefined, userId?: string) => UseRecommendedLessonDetailsReturn;
/**
 * Alias for createUseRecommendedLessonDetails
 */
export declare const createRecommendedLessonDetailsHook: (apiClient: LessonDetailsApiClient) => (lessonId: string | undefined, userId?: string) => UseRecommendedLessonDetailsReturn;
//# sourceMappingURL=useRecommendedLessonDetails.d.ts.map