import * as zustand from 'zustand';

declare enum QUESTION_DIFFICULTY {
    FACIL = "FACIL",
    MEDIO = "MEDIO",
    DIFICIL = "DIFICIL"
}
declare enum QUESTION_TYPE {
    ALTERNATIVA = "ALTERNATIVA",
    DISSERTATIVA = "DISSERTATIVA",
    MULTIPLA_CHOICE = "MULTIPLA_CHOICE"
}
declare enum QUESTION_STATUS {
    APROVADO = "APROVADO",
    REPROVADO = "REPROVADO"
}
interface Question {
    id: string;
    questionText: string;
    description: string;
    type: QUESTION_TYPE;
    status: QUESTION_STATUS;
    difficulty: QUESTION_DIFFICULTY;
    examBoard: string;
    examYear: string;
    answerKey: null | string;
    institutionIds: string[];
    knowledgeMatrix: {
        areaKnowledgeId: string;
        subjectId: string;
        topicId: string;
        subtopicId: string;
        contentId: string;
    }[];
    options: {
        id: string;
        option: string;
        isCorrect: boolean;
    }[];
}
interface Simulado {
    id: string;
    title: string;
    category: string;
    questions: Question[];
}
interface Atividade {
    id: string;
    title: string;
    questions: Question[];
}
interface Aula {
    id: string;
    title: string;
    questions: Question[];
}
interface UserAnswerItem {
    questionId: string;
    activityId: string;
    userId: string;
    answer: string | null;
    optionId: string | null;
}
interface QuizState {
    bySimulated?: Simulado;
    byActivity?: Atividade;
    byQuestionary?: Aula;
    currentQuestionIndex: number;
    selectedAnswers: Record<string, string>;
    userAnswers: UserAnswerItem[];
    timeElapsed: number;
    isStarted: boolean;
    isFinished: boolean;
    userId: string;
    setBySimulated: (simulado: Simulado) => void;
    setByActivity: (atividade: Atividade) => void;
    setByQuestionary: (aula: Aula) => void;
    setUserId: (userId: string) => void;
    setUserAnswers: (userAnswers: UserAnswerItem[]) => void;
    goToNextQuestion: () => void;
    goToPreviousQuestion: () => void;
    goToQuestion: (index: number) => void;
    getActiveQuiz: () => {
        quiz: Simulado | Atividade | Aula;
        type: 'bySimulated' | 'byActivity' | 'byQuestionary';
    } | null;
    selectAnswer: (questionId: string, answerId: string) => void;
    selectMultipleAnswer: (questionId: string, answerIds: string[]) => void;
    skipQuestion: () => void;
    addUserAnswer: (questionId: string, answerId?: string) => void;
    startQuiz: () => void;
    finishQuiz: () => void;
    resetQuiz: () => void;
    updateTime: (time: number) => void;
    startTimer: () => void;
    stopTimer: () => void;
    getCurrentQuestion: () => Question | null;
    getTotalQuestions: () => number;
    getAnsweredQuestions: () => number;
    getUnansweredQuestions: () => number[];
    getSkippedQuestions: () => number;
    getProgress: () => number;
    isQuestionAnswered: (questionId: string) => boolean;
    isQuestionSkipped: (questionId: string) => boolean;
    getCurrentAnswer: () => string | undefined;
    getAllCurrentAnswer: () => UserAnswerItem[] | undefined;
    getQuizTitle: () => string;
    formatTime: (seconds: number) => string;
    getUserAnswers: () => UserAnswerItem[];
    getUnansweredQuestionsFromUserAnswers: () => number[];
    getQuestionsGroupedBySubject: () => {
        [key: string]: Question[];
    };
    getUserId: () => string;
    setCurrentQuestion: (question: Question) => void;
    getUserAnswerByQuestionId: (questionId: string) => UserAnswerItem | null;
    isQuestionAnsweredByUserAnswers: (questionId: string) => boolean;
    getQuestionStatusFromUserAnswers: (questionId: string) => 'answered' | 'unanswered' | 'skipped';
    getUserAnswersForActivity: () => UserAnswerItem[];
}
declare const useQuizStore: zustand.UseBoundStore<Omit<zustand.StoreApi<QuizState>, "setState" | "devtools"> & {
    setState(partial: QuizState | Partial<QuizState> | ((state: QuizState) => QuizState | Partial<QuizState>), replace?: false | undefined, action?: (string | {
        [x: string]: unknown;
        [x: number]: unknown;
        [x: symbol]: unknown;
        type: string;
    }) | undefined): void;
    setState(state: QuizState | ((state: QuizState) => QuizState), replace: true, action?: (string | {
        [x: string]: unknown;
        [x: number]: unknown;
        [x: symbol]: unknown;
        type: string;
    }) | undefined): void;
    devtools: {
        cleanup: () => void;
    };
}>;

export { QUESTION_DIFFICULTY, QUESTION_STATUS, QUESTION_TYPE, type Question, useQuizStore };
