package org.jboss.windup.tooling.data;

import java.io.File;

import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.reporting.model.ClassificationModel;
import org.jboss.windup.reporting.model.Severity;

/**
 * This is a non-graph dependent analogue to {@link ClassificationModel} suitable for usage after the {@link GraphContext} itself has been closed.
 *
 * @author <a href="mailto:jesse.sightler@gmail.com">Jesse Sightler</a>
 */
public interface Classification
{
    /**
     * This is the {@link File} that this {@link Classification} refers to.
     */
    File getFile();

    /**
     * Contains a description of this {@link Classification}. This is similar in concept to a title, and should be one sentence or less.
     */
    String getClassification();

    /**
     * Contains a description of the file and any migration steps that may be necessary.
     */
    String getDescription();

    /**
     * This contains a list of {@link Link}s for further information about the problem and its solution.
     */
    Iterable<Link> getLinks();

    /**
     * This contains the effort level as an integer (Story Points). This is based on the Scrum "modified-Fibonacci" system of effort estimation.
     */
    int getEffort();

    /**
     * This is a hint as to the severity of the problem. This may be used for supplying an icon or glyph in the report to the user.
     */
    Severity getSeverity();

    /**
     * This contains the id of the rule that produced this {@link Classification}.
     */
    String getRuleID();
}
