import type { TableParams, ColumnConfig } from '../../../TableProvider/index';
import type { FilterConfig } from '../../Filter/index';
import type { SubjectEnum } from '../../../enums/SubjectEnum';
import type { BaseModelItem } from './createModelsTableColumnsBase';
import type { BaseApiClient } from '../../../types/api';
/**
 * Configuration for entity-specific text and labels
 */
export interface ModelsTabConfig {
    /** Entity name for messages (e.g., "aula", "atividade") */
    entityName: string;
    /** Plural entity name (e.g., "aulas", "atividades") */
    entityNamePlural: string;
    /** data-testid attribute */
    testId: string;
    /** Empty state title */
    emptyStateTitle: string;
    /** Empty state description */
    emptyStateDescription: string;
    /** Search placeholder */
    searchPlaceholder: string;
}
/**
 * Return type for the models hook
 */
export interface UseModelsReturn<T> {
    models: T[];
    loading: boolean;
    error: string | null;
    pagination: {
        total: number;
        totalPages: number;
    };
    fetchModels: (filters: Record<string, unknown>, subjectsMap?: Map<string, string>) => void;
    deleteModel: (id: string) => Promise<boolean>;
}
/**
 * Props for ModelsTabBase component
 */
export interface ModelsTabBaseProps<T extends BaseModelItem, TFilters, TResponse, TUserFilterData> {
    /** Function to fetch models from API */
    fetchModels: (filters?: TFilters) => Promise<TResponse>;
    /** Function to delete a model */
    deleteModel: (id: string) => Promise<void>;
    /** Callback when create model button is clicked */
    onCreateModel: () => void;
    /** Callback when send button is clicked on a model */
    onSend?: (model: T) => void;
    /** Callback when edit model button is clicked */
    onEditModel?: (model: T) => void;
    /** 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;
    /** User data for populating filter options */
    userFilterData?: TUserFilterData;
    /**
     * Map of subject IDs to names for models display.
     * IMPORTANT: This Map should be memoized with useMemo in the parent component
     * to avoid unnecessary re-fetches.
     */
    subjectsMap?: Map<string, string>;
    /** Configuration for entity-specific text */
    config: ModelsTabConfig;
    /** Function to create table columns */
    createTableColumns: (mapSubjectNameToEnum: ((name: string) => SubjectEnum | null) | undefined, onSend: ((model: T) => void) | undefined, onEdit: ((model: T) => void) | undefined, onDelete: (model: T) => void) => ColumnConfig<T>[];
    /** Function to create filter configs */
    createFiltersConfig: (userFilterData?: TUserFilterData) => FilterConfig[];
    /** Function to build filters from table params */
    buildFiltersFromParams: (params: TableParams) => TFilters;
    /** Hook creator function that receives an API client */
    createUseModels: (apiClient: BaseApiClient) => () => UseModelsReturn<T>;
}
/**
 * Generic ModelsTab base component that can be used by both
 * RecommendedClassModels (Lessons) and ActivityModels with type-safe generics.
 */
export declare const ModelsTabBase: <T extends BaseModelItem, TFilters, TResponse, TUserFilterData>({ fetchModels: fetchModelsProp, deleteModel: deleteModelProp, onCreateModel, onSend, onEditModel, emptyStateImage, noSearchImage, mapSubjectNameToEnum, userFilterData, subjectsMap, config, createTableColumns, createFiltersConfig, buildFiltersFromParams, createUseModels, }: ModelsTabBaseProps<T, TFilters, TResponse, TUserFilterData>) => import("react/jsx-runtime").JSX.Element;
export default ModelsTabBase;
//# sourceMappingURL=ModelsTabBase.d.ts.map