import { ENotifyWith, ERoleCode, FILTER_BY } from '../constant';
export interface IQueryBuilderProps {
    target: ERoleCode;
    schoolYearId: number;
    schoolId: number;
}
export type TFilterBy = (typeof FILTER_BY)[keyof typeof FILTER_BY];
export type TTarget = (typeof ERoleCode)[keyof typeof ERoleCode];
export type TParent = {
    id: number;
    relationship_code: string;
    full_name: string;
};
export interface IFilterValueItem {
    id: number;
    name: string;
    code: string;
    phone?: string;
    email?: string;
    full_name: string;
    location?: string;
    classroom?: string;
    educational_level?: string;
    grade?: string;
    educationalLevelIds?: Array<number>;
    gradeIds?: Array<number>;
    classroomIds?: Array<number>;
    parents?: Array<TParent>;
}
export interface FilterItem {
    filterBy: TFilterBy;
    filterValues: Array<IFilterValueItem>;
}
export interface ITargetSelectedData {
    target: ERoleCode;
    notifyWith?: ENotifyWith;
    filter: Array<FilterItem>;
}
export type TSelectOptionItem = {
    id: number;
    name: string;
    code: string;
    educational_level_id?: number;
    grade?: {
        id: number;
        educational_level_id: number;
    };
};
export interface ISelectOptions {
    EDUCATIONAL_LEVEL: Array<TSelectOptionItem>;
    GRADE: Array<TSelectOptionItem>;
    CLASSROOM: Array<TSelectOptionItem>;
    DEPARTMENT: Array<TSelectOptionItem>;
    ALL: Array<TSelectOptionItem>;
}
export interface ITargetSelectProps {
    targetId?: string;
}
export interface IEducationalLevelGroup {
    educational_level_map_groups: Array<{
        educational_level_id: number;
    }>;
}
export interface IProfile {
    user_code: string;
    grade: {
        id: number;
        name: string;
    };
    program_map_educational_level?: {
        educational_level: {
            code: string;
            name: string;
            id: number;
        };
    };
    teacher_subject_assignments?: Array<{
        classroom_teachers: Array<{
            teacher_type: number;
            classroom: {
                id: number;
                grade_id: number;
            };
        }>;
    }>;
    educational_level_group?: IEducationalLevelGroup;
}
export interface IClassRoom {
    id: number;
    name: string;
    grade_id: number;
    program_id: number;
    school_year_id: number;
    program: {
        name: string;
    };
}
export interface IClassroomStudent {
    id: number;
    classroom: IClassRoom;
}
export interface IRelationshipUser {
    parent_id: number;
    relationship_code: string;
    user: {
        gender: number;
        full_name: string;
        phone_number: string;
    };
}
export interface IUserRole {
    role: {
        name: string;
    };
}
export interface IStudentData {
    id: number;
    full_name: string;
    email?: string;
    phone_number?: string;
    profile_student: IProfile;
    classroom_students: Array<IClassroomStudent>;
    relationshipUsersByStudentId: Array<IRelationshipUser>;
    user_roles: Array<IUserRole>;
}
export interface ITeacherData {
    id: number;
    full_name: string;
    email: string;
    phone_number: string;
    profile_teacher: IProfile;
    user_roles: Array<IUserRole>;
}
export interface IStaff {
    id: number;
    full_name: string;
    email: string;
    phone_number: string;
    profile_staff: IProfile;
    user_roles: Array<IUserRole>;
}
export type TTargetData = IStudentData | ITeacherData | IStaff;
export interface ITargetGroupBuilderProps {
    targetId?: string;
    onChange?(target: Array<ITargetSelectedData>): void;
    onLoading?(loading: boolean): void;
}
export declare enum EStudentStatus {
    STUDYING = 2
}
export interface IInvalidUser {
    code: string;
    reason?: string;
    reasonDetail?: string;
}
