/**
 * Enumeration of the various states an application can be in, and the associated icon.
 */
package com.mindprod.vercheck;

import javax.swing.ImageIcon;
import java.io.Serializable;
import java.net.URL;

/**
 * Possible states an app can have vis a vis update available
 *
 * @author Roedy Green, Canadian Mind Products
 * @version 1.0 Created by IntelliJ IDEA.
 */
public enum AppState implements Serializable
    {
        /**
         * empty slot
         */
        EMPTY( "verempty", "empty.png" ),
        /**
         * not checked yet
         */
        UNKNOWN( "verunknown", "unknown.png" ),
        /**
         * in process of being checked
         */
        CHECKING( "verchecking", "checking.png" ),
        /**
         * new version available, marker missing or does not match.
         */
        CHANGED( "verdarkleaf", "changed.png" ),

        /**
         * released in last week, but unchanged since marker.
         */
        UNCHANGED_RELEASED_IN_LAST_WEEK( "verleaf", "recentlychanged.png" ),

        /**
         * released a week to a month ago, but unchanged since marker.
         */
        UNCHANGED_RELEASED_IN_LAST_MONTH( "vergreen", "unchangedgreen.png" ),

        /**
         * released a month to a year ago, but unchanged since marker.
         */
        UNCHANGED_RELEASED_MORE_THAN_A_MONTH_AGO( "verorange", "unchangedorange.png" ),

        /**
         * released over a year ago, unchanged since marker.
         */
        UNCHANGED_RELEASED_MORE_THAN_A_YEAR_AGO( "verred", "unchangedred.png" ),

        /**
         * could not contact website, so status is unknown
         */
        BROKENLINK( "verbroken", "brokenlink.png" ),

        /**
         * Entry has invalid data fields.
         */
        INVALID( "verinvalid", "invalid.png" );

    // ------------------------------ FIELDS ------------------------------

    /**
     * Defining a layout version for a class. Watch the spelling and keywords!
     */
    public static final long serialVersionUID = 2L;

    /**
     * icon for this enum
     */
    private final ImageIcon icon;

    // -------------------------- PUBLIC INSTANCE  METHODS --------------------------
    /**
     * get icon corresponding to this enum
     *
     * @return 16x16 or smaller ImageIcon.
     */
    public ImageIcon getIcon()
        {
        return icon;
        }

    /**
     * get short name of enum constant, used an HTML class
     *
     * @return short name.
     */
    public String getShortName()
        {
        return shortName;
        }

    /**
     * short name for enum, used as HTML class name
     */
    private final String shortName;
    // --------------------------- CONSTRUCTORS ---------------------------

    /**
     * constructor
     *
     * @param shortName used as class in HTML export
     * @param png       name of icon png
     */
    AppState( String shortName, String png )
        {
        this.shortName = shortName;
        final URL url = VerCheck.class.getResource( "image/" + png );
        this.icon = new ImageIcon( url );
        }
    }