import type { ActivityFilterOption } from '../types/activitiesHistory';
/**
 * Generic user institution data structure
 * Matches the structure from GET /user/me endpoint
 */
export interface UserInstitutionData {
    school?: {
        id: string;
        name: string;
    };
    schoolYear?: {
        id: string;
        name: string;
    };
    class?: {
        id: string;
        name: string;
    };
}
/**
 * Generic subject teacher topic class structure
 */
export interface SubTeacherTopicClassData {
    subject?: {
        id: string;
        name: string;
    };
    class?: {
        id: string;
        name: string;
    };
}
/**
 * Generic user data structure for filter extraction
 * Can be extended by consuming projects
 */
export interface UserFilterSourceData {
    userInstitutions?: UserInstitutionData[];
    subTeacherTopicClasses?: SubTeacherTopicClassData[];
}
/**
 * Extract unique school options from user data
 * Uses Map for deduplication to handle multiple institutions with same school
 *
 * @param userData - User data from /user/me endpoint
 * @returns Array of unique schools sorted by name
 *
 * @example
 * ```typescript
 * const userData = useUserStore(state => state.data);
 * const schools = getSchoolOptionsFromUserData(userData);
 * // Returns: [{ id: '1', name: 'Escola A' }, { id: '2', name: 'Escola B' }]
 * ```
 */
export declare const getSchoolOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[];
/**
 * Extract unique subject options from user data
 * Uses Map for deduplication
 *
 * @param userData - User data from /user/me endpoint
 * @returns Array of unique subjects sorted by name
 *
 * @example
 * ```typescript
 * const userData = useUserStore(state => state.data);
 * const subjects = getSubjectOptionsFromUserData(userData);
 * // Returns: [{ id: '1', name: 'Matemática' }, { id: '2', name: 'Português' }]
 * ```
 */
export declare const getSubjectOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[];
/**
 * Extract unique school year (série) options from user data
 *
 * @param userData - User data from /user/me endpoint
 * @returns Array of unique school years sorted by name
 */
export declare const getSchoolYearOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[];
/**
 * Extract unique class (turma) options from user data
 * Combines classes from userInstitutions and subTeacherTopicClasses
 *
 * @param userData - User data from /user/me endpoint
 * @returns Array of unique classes sorted by name
 */
export declare const getClassOptionsFromUserData: (userData: UserFilterSourceData | null | undefined) => ActivityFilterOption[];
/**
 * Build user filter data object from user data
 * Convenience function to create ActivityUserFilterData
 *
 * @param userData - User data from /user/me endpoint
 * @returns Object with schools and subjects arrays
 *
 * @example
 * ```typescript
 * const userData = useUserStore(state => state.data);
 * const userFilterData = buildUserFilterData(userData);
 * // Use with ActivitiesHistory component:
 * <ActivitiesHistory userFilterData={userFilterData} ... />
 * ```
 */
export declare const buildUserFilterData: (userData: UserFilterSourceData | null | undefined) => {
    schools: ActivityFilterOption[];
    subjects: ActivityFilterOption[];
};
/**
 * Merge two filter option arrays, deduplicating by ID.
 * Returns the base array unchanged if extra adds no new items.
 *
 * @param base - Base filter options array
 * @param extra - Additional filter options to merge
 * @returns Merged and sorted array of unique filter options
 *
 * @example
 * ```typescript
 * const userSubjects = getSubjectOptionsFromUserData(userData);
 * const apiSubjects = [{ id: '3', name: 'História' }];
 * const allSubjects = mergeFilterOptions(userSubjects, apiSubjects);
 * // Returns deduplicated and sorted array
 * ```
 */
export declare const mergeFilterOptions: (base: ActivityFilterOption[], extra: ActivityFilterOption[]) => ActivityFilterOption[];
/**
 * Generic entity reference with id and name.
 * Used internally for structural typing in extractBreakdownFilterOptions.
 */
interface EntityRefLike {
    id: string;
    name: string;
}
/**
 * Structural shape of a single breakdown entry (school/class/schoolYear).
 * Matches both ActivityBreakdownItem and ExamBreakdownItem.
 */
interface BreakdownLike {
    school?: EntityRefLike | null;
    schoolYear?: EntityRefLike | null;
    class?: EntityRefLike | null;
}
/**
 * Structural shape of a history item that carries subject and breakdown data.
 * Matches both ActivityHistoryResponse and ExamHistoryResponse.
 */
interface BreakdownHistoryItem {
    subject?: EntityRefLike | null;
    breakdown?: BreakdownLike[];
}
/**
 * Filter options extracted from a list of history items with breakdown data.
 */
export interface BreakdownFilterOptions {
    schools: ActivityFilterOption[];
    classes: ActivityFilterOption[];
    subjects: ActivityFilterOption[];
    schoolYears: ActivityFilterOption[];
}
/**
 * Extract unique filter options (schools, classes, subjects, schoolYears)
 * from a list of history items that carry subject and breakdown data.
 *
 * Used by both useActivitiesHistory and useExamsHistory to avoid duplication.
 *
 * @param items - Array of history items (activities or exams) from the API
 * @returns Deduplicated, sorted filter options grouped by dimension
 *
 * @example
 * ```typescript
 * const options = extractBreakdownFilterOptions(data.activities);
 * // Returns: { schools: [...], classes: [...], subjects: [...], schoolYears: [...] }
 * ```
 */
export declare const extractBreakdownFilterOptions: (items: BreakdownHistoryItem[]) => BreakdownFilterOptions;
export {};
//# sourceMappingURL=filterHelpers.d.ts.map