/**
 * This file is part of the Meeds project (https://meeds.io/).
 *
 * Copyright (C) 2020 - 2025 Meeds Association contact@meeds.io
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
package org.exoplatform.social.core.storage;

import org.exoplatform.social.common.ExoSocialException;

public class ActivityStorageException extends ExoSocialException {

  private static final String MESSAGE_BUNDLE_DELIMITER = ".";

  public static enum Type {
    ILLEGAL_ARGUMENTS("Illegal_Arguments"),
    FAILED_TO_SAVE_ACTIVITY("Failed_To_Save_Activity"),
    FAILED_TO_ATTACH_FILES_TO_ACTIVITY("Failed_To_Attach_Files_To_Activity"),
    FAILED_TO_GET_ACTIVITY("Failed_To_Get_Activity"),
    FAILED_TO_UPDATE_ACTIVITY("Failed_To_Update_Activity"),
    FAILED_TO_DELETE_ACTIVITY("Failed_To_Delete_Activity"),
    FAILED_TO_SAVE_COMMENT("Failed_To_Save_Comment"),
    FAILED_TO_DELETE_COMMENT("Failed_To_Delete_Comment"),
    FAILED_TO_GET_NUMBER_OF_COMMENTS("Failed_To_Get_Number_Of_Comments"),
    FAILED_TO_GET_ACTIVITIES("Failed_To_Get_Activities"),
    FAILED_TO_GET_ACTIVITIES_OF_CONNECTIONS("Failed_To_Get_Activities_Of_Connections"),
    FAILED_TO_GET_ACTIVITIES_OF_CONNECTIONS_WITH_OFFSET_LIMIT("Failed_To_Get_Activities_Of_Connections_With_Offset_Limit"),
    FAILED_TO_GET_NUMBER_OF_ACTIVITIES_OF_CONNECTIONS("Failed_To_Get_Number_Of_Activities_Of_Connections"),
    FAILED_TO_GET_ACTIVITIES_COUNT("Failed_To_Get_Activities_Count"),
    FAILED_TO_GET_NUMBER_OF_NEWER_ON_ACTIVITIES_OF_CONNECTIONS("Failed_To_Get_Number_Of_Newer_On_Activities_Of_Connections"),
    FAILED_TO_GET_NEWER_ON_ACTIVITIES_OF_CONNECTIONS("Failed_To_Get_Newer_On_Activities_Of_Connections"),
    FAILED_TO_GET_OLDER_ON_ACTIVITIES_OF_CONNECTIONS("Failed_To_Get_Older_On_Activities_Of_Connections"),
    FAILED_TO_GET_NUMBER_OF_OLDER_ON_ACTIVITIES_OF_CONNECTIONS("Failed_To_Get_Number_Of_Older_On_Activities_Of_Connections"),
    FAILED_TO_GET_USER_SPACE_ACTIVITIES_WITH_OFFSET_LIMIT("Failed_To_Get_User_Space_Activities_With_Offset_Limit"),
    FAILED_TO_GET_NUMBER_OF_USER_SPACE_ACTIVITIES("Failed_To_Get_Number_Of_User_Space_Activities");;

    private final String msgKey;

    private Type(String msgKey) {
      this.msgKey = msgKey;
    }

    @Override
    public String toString() {
      return this.getClass() + MESSAGE_BUNDLE_DELIMITER + msgKey;
    }
  }


  public ActivityStorageException(Type type) {
    super(type.toString());
  }


  public ActivityStorageException(Type type, String[] messageArguments) {
    super(type.toString(), messageArguments);
  }

  public ActivityStorageException(Type type, String message) {
    super(type.toString(), message);
  }

  public ActivityStorageException(Type type, String message, Throwable cause) {
    super(type.toString(), message, cause);
  }

  public ActivityStorageException(Type type, String[] messageArguments, String message, Throwable cause) {
    super(type.toString(), messageArguments, message, cause);
  }

}
