package pr2.exceptions.eigene_ausnahme;

/**
 * Eine Sicherung im Stromkreis.
 */
public class Fuse {

    /**
     * 16 Ampere-Sicherung.
     */
    public static final int A16 = 16;

    /**
     * 25 Ampere-Sicherung.
     */
    public static final int A25 = 25;

    /**
     * 32 Ampere-Sicherung.
     */
    public static final int A32 = 32;

    /**
     * Strom, bei dem die Sicherung auslöst.
     */
    private final int tripCurrent;

    /**
     * Legt eine neue Sicherung an.
     *
     * @param tripCurrent Strom, bei dem die Sicherung auslösen soll.
     * @throws IllegalCurrentException Ausnahme bei einem
     *                                 ungültigen Spannungswert.
     */
    public Fuse(int tripCurrent) throws IllegalCurrentException { 
        switch (tripCurrent) {
            case A16:
            case A25:
            case A32:
                this.tripCurrent = tripCurrent;
                break;
            default:
                throw new IllegalCurrentException(tripCurrent);
        }
    }

    /**
     * Die Sicherung benutzen.
     *
     * @param current Strom, der durch die Sicherung fließt.
     * @throws FuseTrippedException wird geworfen, wenn der Srom zu groß wird.
     */
    public void use(int current) throws FuseTrippedException { 
        if (current > tripCurrent) {
            throw new FuseTrippedException(current, tripCurrent);
        }
    }
}
