/**
 * Razred Cesta predstavlja osnovno cesto z atributi, kot so ime, dolžina in stanje.
 * Omogoča nastavitev in pridobitev teh lastnosti ter izvedbo operacij, kot so popravilo in 
 * posodabljanje dolžine ceste. Vključuje tudi preverjanje veljavnosti za dolžino in stanje ceste.
 */
public class Cesta {
    private String ime;
    private double dolzina; // dolzina v kilometrih
    private String stanje; // stanje ceste: "nov", "popravljen", "slab"

    /**
     * Konstruktor za ustvarjanje objekta Cesta.
     * 
     * @param ime Ime ceste
     * @param dolzina Dolžina ceste v kilometrih
     * @param stanje Stanje ceste (nov, popravljen, slab)
     * @throws DolzinaException Če je dolžina ceste manjša ali enaka 0
     * @throws StanjeException Če stanje ceste ni veljavno
     */
    public Cesta(String ime, double dolzina, String stanje) throws DolzinaException, StanjeException {
        this.ime = ime;
        setDolzina(dolzina);
        setStanje(stanje);
    }

    /**
     * Pridobi ime ceste.
     * 
     * @return Ime ceste
     */
    public String getIme() {
        return ime;
    }

    /**
     * Pridobi dolžino ceste.
     * 
     * @return Dolžina ceste v kilometrih
     */
    public double getDolzina() {
        return dolzina;
    }

    /**
     * Pridobi stanje ceste.
     * 
     * @return Stanje ceste (nov, popravljen, slab)
     */
    public String getStanje() {
        return stanje;
    }

    /**
     * Nastavi dolžino ceste.
     * 
     * @param dolzina Nova dolžina ceste v kilometrih
     * @throws DolzinaException Če je nova dolžina manjša ali enaka 0
     */
    public void setDolzina(double dolzina) throws DolzinaException {
        if (dolzina <= 0) {
            throw new DolzinaException("Dolžina ceste mora biti pozitivna vrednost.");
        }
        this.dolzina = dolzina;
    }

    /**
     * Nastavi stanje ceste.
     * 
     * @param stanje Novo stanje ceste (nov, popravljen, slab)
     * @throws StanjeException Če stanje ni veljavno
     */
    public void setStanje(String stanje) throws StanjeException {
        if (!stanje.equals("nov") && !stanje.equals("popravljen") && !stanje.equals("slab")) {
            throw new StanjeException("Neveljavno stanje ceste. Možnosti so: nov, popravljen, slab.");
        }
        this.stanje = stanje;
    }

    /**
     * Izvede popravilo ceste. Če je cesta že v stanju "nov", se vrže izjema.
     * 
     * @throws IllegalStateException Če je cesta že v stanju "nov"
     */
    public void popravilo() throws IllegalStateException {
        if (stanje.equals("nov")) {
            throw new IllegalStateException("Cesta je že nova, ni potrebe po popravilu.");
        }
        this.stanje = "popravljen";
        System.out.println("Cesta je bila popravljena.");
    }

    /**
     * Posodobi dolžino ceste z dodajanjem dodatne dolžine.
     * 
     * @param dodatnaDolzina Dodatna dolžina v kilometrih
     * @throws DolzinaException Če je dodatna dolžina manjša ali enaka 0
     */
    public void posodobiDolzino(double dodatnaDolzina) throws DolzinaException {
        if (dodatnaDolzina <= 0) {
            throw new DolzinaException("Dodatna dolžina mora biti pozitivna vrednost.");
        }
        this.dolzina += dodatnaDolzina;
        System.out.println("Dolžina ceste je bila povečana za " + dodatnaDolzina + " km.");
    }
}
