/**
 ********************************************************************************
 * Copyright (c) 2017-2020 Robert Bosch GmbH and others.
 * 
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 * 
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Contributors:
 *     Robert Bosch GmbH - initial API and implementation
 ********************************************************************************
 */

package org.eclipse.app4mc.sca.logging.impl;

import java.util.List;

import org.eclipse.app4mc.sca.logging.exception.App4mcLoggerException;
import org.eclipse.app4mc.sca.logging.manager.LogFactory.LoggerType;
import org.eclipse.app4mc.sca.logging.util.App4mcLogUtil;
import org.eclipse.app4mc.sca.logging.util.LogInformation;

/**
 * The interface for the UI specific logging mechanism
 */
public interface IExternalLogger extends ILogger {

  /**
   * Logs the given list of log information
   *
   * @param logInfoList {@link LogInformation}
   */
  public void log(final List<LogInformation> logInfoList);

  /**
   * Mentions the type of the logger
   *
   * @return {@link LoggerType}
   */
  public String getName();

  /**
   * Validates the given log information and returns the state
   *
   * @param logInfo The log information to be validated
   * @return true if the log info contains relevant data to log into the this external logger
   * @throws App4mcLoggerException If the validation fails
   */
  public boolean validate(LogInformation logInfo) throws App4mcLoggerException;

  /**
   * {@inheritDoc}
   */
  @Override
  default boolean isEnabled(final LogInformation logInfo) throws App4mcLoggerException {
    return App4mcLogUtil.isInDebugMode(logInfo);
  }
}
