/**
 * Razred GorskaCesta predstavlja gorsko cesto, ki podeduje lastnosti osnovnega razreda Cesta.
 * Dodaja dodatno lastnost visinske razlike, ki predstavlja razliko v višini v metrih med začetkom
 * in koncem ceste.
 * 
 * Ta razred omogoča nastavitev in posodabljanje visinske razlike ter zagotavlja preverjanje
 * veljavnosti teh vrednosti.
 */
public class GorskaCesta extends Cesta {
    private double visinskaRazlika; // Visinska razlika v metrih

    /**
     * Konstruktor za ustvarjanje objekta GorskaCesta.
     * 
     * @param ime Ime ceste
     * @param dolzina Dolžina ceste v kilometrih
     * @param stanje Stanje ceste (nov, popravljen, slab)
     * @param visinskaRazlika Visinska razlika v metrih
     * @throws DolzinaException Če je dolžina ceste manjša ali enaka 0
     * @throws StanjeException Če stanje ceste ni veljavno
     */
    public GorskaCesta(String ime, double dolzina, String stanje, double visinskaRazlika) throws DolzinaException, StanjeException {
        super(ime, dolzina, stanje);
        setVisinskaRazlika(visinskaRazlika);
    }

    /**
     * Pridobi visinsko razliko ceste.
     * 
     * @return Visinska razlika v metrih
     */
    public double getVisinskaRazlika() {
        return visinskaRazlika;
    }

    /**
     * Nastavi visinsko razliko ceste.
     * 
     * @param visinskaRazlika Nov visinska razlika v metrih
     * @throws DolzinaException Če je visinska razlika manjša od 0
     */
    public void setVisinskaRazlika(double visinskaRazlika) throws DolzinaException {
        if (visinskaRazlika < 0) {
            throw new DolzinaException("Visinska razlika mora biti pozitivna vrednost.");
        }
        this.visinskaRazlika = visinskaRazlika;
    }

    /**
     * Posodobi visinsko razliko ceste z dodajanjem dodatne visinske razlike.
     * 
     * @param dodatnaVisinskaRazlika Dodatna visinska razlika v metrih
     * @throws DolzinaException Če je dodatna visinska razlika manjša ali enaka 0
     */
    public void posodobiVisinskoRazliko(double dodatnaVisinskaRazlika) throws DolzinaException {
        if (dodatnaVisinskaRazlika <= 0) {
            throw new DolzinaException("Dodatna visinska razlika mora biti pozitivna vrednost.");
        }
        this.visinskaRazlika += dodatnaVisinskaRazlika;
        System.out.println("Visinska razlika ceste je bila povečana za " + dodatnaVisinskaRazlika + " metrov.");
    }
}
