/**
 * HttpError mit Unterstützung für Fehlercodes
 * 
 * Verwendung:
 * - new HttpError('Fehlermeldung', 400) - Legacy, wird weiterhin unterstützt
 * - new HttpError({ code: 'ERROR_USER_NOT_FOUND' }, 404) - Mit Fehlercode
 * - new HttpError({ code: 'ERROR_MEMBER_NOT_FOUND', params: { memberId: 123 } }, 404) - Mit Parametern
 */
class HttpError extends Error {
    constructor(messageOrError, statusCode) {
        // Unterstützung für beide Formate:
        // 1. Legacy: new HttpError('Fehlermeldung', 400)
        // 2. Neu: new HttpError({ code: 'ERROR_CODE', params: {...} }, 400)
        if (typeof messageOrError === 'string') {
            // Legacy-Format
            super(messageOrError);
            this.errorCode = null;
            this.errorParams = null;
        } else if (messageOrError && typeof messageOrError === 'object' && messageOrError.code) {
            // Neues Format mit Fehlercode
            super(messageOrError.code); // Für Stack-Trace
            this.errorCode = messageOrError.code;
            this.errorParams = messageOrError.params || null;
        } else {
            // Fallback
            super('Unknown error');
            this.errorCode = null;
            this.errorParams = null;
        }
        
        this.name = this.constructor.name;
        this.statusCode = statusCode || 500;
        Error.captureStackTrace(this, this.constructor);
    }
    
    /**
     * Gibt das Fehler-Objekt für die API-Antwort zurück
     * @returns {object} Fehler-Objekt mit code und optional params
     */
    toJSON() {
        if (this.errorCode) {
            return {
                code: this.errorCode,
                ...(this.errorParams && { params: this.errorParams })
            };
        }
        // Legacy: Gib die Nachricht zurück
        return {
            message: this.message
        };
    }
}

export default HttpError; 
