import { StatusCodes } from 'http-status-codes';
// import HTTPException from './HttpException';
import { OaiErrorCodes } from './OaiErrorCodes';

export class ErrorCode {
    public static readonly Unauthenticated = 'Unauthenticated';
    public static readonly NotFound = 'NotFound';
    public static readonly MaximumAllowedGrade = 'MaximumAllowedGrade';
    public static readonly AsyncError = 'AsyncError';
    public static readonly UnknownError = 'UnknownError';
}

export class ErrorModel {
    /**
     * Unique error code which identifies the error.
     */
    public code: string;
    /**
     * Status code of the error.
     */
    public status: number;
    /**
     * Any additional data that is required for translation.
     */
    // public metaData?: any;
}

export class OaiModelException extends Error {
    public status: number;
    public message: string;
    public oaiCode: number;

    // constructor(status: number, message: string) {
    //   super(message);
    //   this.status = status;
    //   this.message = message;
    // }
    constructor(status: number, message: string, oaiCode: number) {
        super(message);
        this.status = status;
        this.message = message;
        this.oaiCode = oaiCode;
    }
    // constructor(code: string = ErrorCode.UnknownError, message: any = null) {
    //     super(code);
    //     Object.setPrototypeOf(this, new.target.prototype);
    //     this.name = code;
    //     this.status = 500;
    //     this.message = message;
    //     // switch (code) {
    //     //   case ErrorCode.Unauthenticated:
    //     //     this.status = 401;
    //     //     break;
    //     //   case ErrorCode.MaximumAllowedGrade:
    //     //     this.status = 400;
    //     //     break;
    //     //   case ErrorCode.AsyncError:
    //     //     this.status = 400;
    //     //     break;
    //     //   case ErrorCode.NotFound:
    //     //     this.status = 404;
    //     //     break;
    //     //   default:
    //     //     this.status = 500;
    //     //     break;
    //     // }
    //   }
}

export class BadOaiModelException extends OaiModelException {
    constructor(message?: string) {
        super(StatusCodes.INTERNAL_SERVER_ERROR, message || 'bad Request', OaiErrorCodes.BADARGUMENT);
        this.stack = '';
    }
}

// export default OaiModelexception;
