/**
 * useRecommendedLessonsPage Hook Factory
 *
 * Factory function to create a hook for RecommendedLessons, LessonDrafts, and LessonModels pages.
 * Contains all common state, memos, and callbacks.
 */
import { type RecommendedClassHistoryFilters, type RecommendedClassHistoryApiResponse, type RecommendedClassTableItem, type RecommendedClassData, type UpdateRecommendedClassData, type RecommendedClassModelFilters, type RecommendedClassModelsApiResponse, type RecommendedClassModelTableItem } from '../types/recommendedLessons';
import type { SendLessonFormData, CategoryConfig } from '../components/SendLessonModal/types';
import type { FilterConfig } from '../components/Filter/index';
import { SubjectEnum } from '../enums/SubjectEnum';
/**
 * API client interface
 */
export interface RecommendedLessonsApiClient {
    get: <T>(url: string, config?: {
        params?: Record<string, unknown>;
    }) => Promise<{
        data: T;
    }>;
    post: <T>(url: string, data?: unknown) => Promise<{
        data: T;
    }>;
    patch: <T>(url: string, data?: unknown) => Promise<{
        data: T;
    }>;
    delete: <T>(url: string) => Promise<{
        data: T;
    }>;
}
/**
 * User institution data structure
 */
export interface UserInstitution {
    school: {
        id: string;
        name: string;
    };
    schoolYear: {
        id: string;
        name: string;
    };
    class: {
        id: string;
        name: string;
    };
}
/**
 * Subject teacher class data structure
 */
export interface SubTeacherTopicClass {
    subject: {
        id: string;
        name: string;
    };
    class: {
        id: string;
        name: string;
    };
}
/**
 * User data structure
 */
export interface RecommendedLessonsUserData {
    userInstitutions?: UserInstitution[];
    subTeacherTopicClasses?: SubTeacherTopicClass[];
}
/**
 * Navigation paths configuration
 */
export interface RecommendedLessonsPagePaths {
    /** Path for creating a new lesson */
    createLesson: string;
    /** Path for creating a new model */
    createModel: string;
    /** Base path for lesson details */
    lessonDetails: string;
    /** Base path for editing a lesson */
    editLesson: string;
    /** Path for editing a model (with id parameter) */
    editModel: string;
}
/**
 * API endpoints configuration
 */
export interface RecommendedLessonsPageEndpoints {
    /** Endpoint for fetching recommendedClass history */
    recommendedClassHistory: string;
    /** Endpoint for fetching recommendedClass models/drafts */
    recommendedClassDrafts: string;
    /** Endpoint for submitting a recommendedClass */
    submitRecommendedClass: string;
}
/**
 * UI text configuration
 */
export interface RecommendedLessonsPageTexts {
    title: string;
    createButtonText: string;
    searchPlaceholder: string;
}
/**
 * Configuration for createUseRecommendedLessonsPage factory
 */
export interface UseRecommendedLessonsPageConfig {
    /** API client for making requests */
    api: RecommendedLessonsApiClient;
    /** Navigation function */
    navigate: (path: string, options?: {
        state?: unknown;
    }) => void;
    /** User data for filter options */
    userData: RecommendedLessonsUserData | null;
    /** Navigation paths */
    paths: RecommendedLessonsPagePaths;
    /** API endpoints */
    endpoints: RecommendedLessonsPageEndpoints;
    /** UI text */
    texts: RecommendedLessonsPageTexts;
    /** Image for empty state */
    emptyStateImage: string;
    /** Image for no search results */
    noSearchImage: string;
    /** Function to map subject name to SubjectEnum */
    mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;
    /** Extra filter categories to inject (e.g., creatorType for gestors) */
    extraFilterCategories?: FilterConfig[];
}
/**
 * Return type for the useRecommendedLessonsPage hook
 */
export interface UseRecommendedLessonsPageReturn {
    /** Props for RecommendedLessonsHistory component */
    historyProps: {
        fetchRecommendedClassHistory: (filters?: RecommendedClassHistoryFilters) => Promise<RecommendedClassHistoryApiResponse>;
        fetchRecommendedClassModels: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>;
        deleteRecommendedClassModel: (id: string) => Promise<void>;
        onCreateLesson: () => void;
        onCreateModel: () => void;
        onRowClick: (row: RecommendedClassTableItem) => void;
        deleteRecommendedClass: (id: string) => Promise<void>;
        updateRecommendedClass: (id: string, data: UpdateRecommendedClassData) => Promise<void>;
        fetchRecommendedClassById: (id: string) => Promise<RecommendedClassData>;
        onEditModel: (model: RecommendedClassModelTableItem) => void;
        onSendLesson: (model: RecommendedClassModelTableItem) => void;
        fetchRecommendedClassDrafts: (filters?: RecommendedClassModelFilters) => Promise<RecommendedClassModelsApiResponse>;
        deleteRecommendedClassDraft: (id: string) => Promise<void>;
        onSendDraft: (draft: RecommendedClassModelTableItem) => void;
        onEditDraft: (draft: RecommendedClassModelTableItem) => void;
        emptyStateImage: string;
        noSearchImage: string;
        mapSubjectNameToEnum: (subjectName: string) => SubjectEnum | null;
        userFilterData: {
            schools: Array<{
                id: string;
                name: string;
            }>;
            classes: Array<{
                id: string;
                name: string;
            }>;
            subjects: Array<{
                id: string;
                name: string;
            }>;
            schoolYears: Array<{
                id: string;
                name: string;
            }>;
        };
        subjectsMap: Map<string, string>;
        title: string;
        createButtonText: string;
        searchPlaceholder: string;
        extraFilterCategories?: FilterConfig[];
    };
    /** Props for SendLessonModal component */
    modalProps: {
        isOpen: boolean;
        onClose: () => void;
        onSubmit: (formData: SendLessonFormData) => Promise<void>;
        categories: CategoryConfig[];
        onCategoriesChange: (categories: CategoryConfig[]) => void;
        isLoading: boolean;
        modalTitle: string | undefined;
        /** Whether the selected model has activity drafts attached, which
         *  controls the visibility of the "Permitir refazer?" field. */
        hasAttachedActivities: boolean;
    };
    /** Navigate function for custom tab handlers */
    navigate: (path: string, options?: {
        state?: unknown;
    }) => void;
}
export declare const createUseRecommendedLessonsPage: (config: UseRecommendedLessonsPageConfig) => (() => UseRecommendedLessonsPageReturn);
/**
 * Alias for createUseRecommendedLessonsPage
 */
export declare const createRecommendedLessonsPageHook: (config: UseRecommendedLessonsPageConfig) => (() => UseRecommendedLessonsPageReturn);
//# sourceMappingURL=useRecommendedLessonsPage.d.ts.map