import { errors, ResponseStatus } from '@adonisjs/core/http';
import app from '@adonisjs/core/services/app';
export class AKAPIException extends errors.E_HTTP_EXCEPTION {
    displayCauseInProduction = false;
    constructor(status, code, message, cause, displayCauseInProduction) {
        super(message, { code, status, cause });
        if (displayCauseInProduction !== undefined)
            this.displayCauseInProduction = displayCauseInProduction;
    }
    handle(error, ctx) {
        const body = { errorId: error.code, message: error.message };
        if (!app.inProduction || error.displayCauseInProduction)
            body.cause = error?.cause;
        ctx.response.status(error.status).send(body);
    }
    equals(other) {
        return this.code === other.code;
    }
    static auth = {
        token: {
            missing: new AKAPIException(ResponseStatus.NotAcceptable, 'auth.token.missing', `Le token est absent.`),
            malformed: new AKAPIException(ResponseStatus.BadRequest, 'auth.token.malformed', `Le token est malformé.`),
            expired: new AKAPIException(ResponseStatus.Unauthorized, 'auth.token.expired', `Le token est expiré.`),
            wrongUserId: new AKAPIException(ResponseStatus.BadRequest, 'auth.token.wrong-user-id', `Impossible de trouver l'utilisateur de ce token.`),
            wrongType: new AKAPIException(ResponseStatus.BadRequest, 'auth.token.wrong-type', `Le token fourni n'est pas du bon type.`),
            typeUnknown: new AKAPIException(ResponseStatus.BadRequest, 'auth.token.type-unknown', `Le type du token est inconnu.`),
        },
        wrongCredentials: new AKAPIException(ResponseStatus.Unauthorized, 'auth.wrong-credentials', `Votre combinaison d'email et mot de passe est incorrecte.`),
        userDisabled: new AKAPIException(ResponseStatus.Unauthorized, 'auth.user-disabled', `Cet utilisateur a été désactivé.`),
        emailAlreadyExist: new AKAPIException(ResponseStatus.Conflict, 'auth.email-already-exist', `Cet email est déjà utilisé.`),
        notAuhthentified: new AKAPIException(ResponseStatus.Unauthorized, 'auth.not-authentified', `Vous n'êtes pas identifié.`),
    };
    static validationError = function (error) {
        return new AKAPIException(ResponseStatus.BadRequest, 'validation-error', `Les informations fournies sont incorrectes.`, error?.messages, true);
    };
    static notFound = new AKAPIException(ResponseStatus.NotFound, 'not-found', `Ce chemin n'existe pas.`);
    static notAvailable = new AKAPIException(ResponseStatus.ServiceUnavailable, 'not-available', `Ce service est indisponible.`);
    static alreadyExist = new AKAPIException(ResponseStatus.Conflict, 'already-exist', `Cet objet exist déjà.`);
    static availabilityAlreadyExist = new AKAPIException(ResponseStatus.Conflict, 'availability-already-exist', `Vous avez déjà un créneau à la même date, au même moment de la journée.`);
    static doesNotExist = new AKAPIException(ResponseStatus.NotFound, 'does-not-exist', `Cet objet n'exist pas.`);
    static malformedUuid = new AKAPIException(ResponseStatus.BadRequest, 'malformed-uuid', `L'uuid fourni n'a pas le bon format.`);
    static malformedQuery = new AKAPIException(ResponseStatus.BadRequest, 'malformed-query', `La query n'a pas le bon format.`);
    static notAllowed = new AKAPIException(ResponseStatus.Unauthorized, 'not-allowed', `Vous n'avez pas le droit d'effectuer cette action.`);
    static tooManyRequests = new AKAPIException(ResponseStatus.TooManyRequests, 'too-many-requests', `Vous avez dépassé le quota de requête, veuillez ressayer plus tard.`);
}
//# sourceMappingURL=api_exception.js.map