import { dayInNDays } from "../../utils/date";

export interface ISchedulingData {
    easiness: number;
    consecutiveCorrectAnswers: number;
    nextDueDate: number;
};

export enum AnswerType {
    CORRECT,
    WRONG,
};

function performanceRating(answer: AnswerType): number {
    switch (answer) {
        case AnswerType.WRONG:
            return 1;
        case AnswerType.CORRECT:
            return 4;
    }
}

export function updateSchedulingData(data: ISchedulingData, answer: AnswerType): ISchedulingData {
    const perfRating = performanceRating(answer);

    data.easiness += -0.8 + 0.28 * perfRating + 0.02 * Math.pow(perfRating, 2);
    data.consecutiveCorrectAnswers = answer === AnswerType.CORRECT ? (
        data.consecutiveCorrectAnswers + 1
    ) : 0;
    data.nextDueDate = answer === AnswerType.CORRECT ? (
        dayInNDays(6 * Math.pow(data.easiness, data.consecutiveCorrectAnswers - 1))
    ) : dayInNDays(1);

    return data;
}
