/**
 * Razred Cesta predstavlja osnovno cesto z informacijami o njenem imenu, dolžini in stanju.
 * Omogoča upravljanje dolžine ceste, stanje ceste, ter izvajanje popravila ceste.
 */
public class Cesta {
    private String ime; // Ime ceste
    private double dolzina; // Dolžina v kilometrih
    private String stanje; // Stanje ceste: "nov", "popravljen", "slab"

    /**
     * Konstruktor za inicializacijo objekta Cesta.
     * 
     * @param ime Ime ceste
     * @param dolzina Dolžina ceste v kilometrih
     * @param stanje Stanje ceste (npr. "nov", "popravljen", "slab")
     * @throws IllegalArgumentException Če je dolžina manjša ali enaka 0 ali stanje ni veljavno
     */
    public Cesta(String ime, double dolzina, String stanje) throws IllegalArgumentException {
        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 (npr. "nov", "popravljen", "slab")
     */
    public String getStanje() {
        return stanje;
    }

    /**
     * Nastavi dolžino ceste.
     * 
     * @param dolzina Nova dolžina ceste v kilometrih
     * @throws IllegalArgumentException Če je dolžina manjša ali enaka 0
     */
    public void setDolzina(double dolzina) throws IllegalArgumentException {
        if (dolzina <= 0) {
            throw new IllegalArgumentException("Dolžina ceste mora biti pozitivna vrednost.");
        }
        this.dolzina = dolzina;
    }

    /**
     * Nastavi stanje ceste.
     * 
     * @param stanje Novo stanje ceste (npr. "nov", "popravljen", "slab")
     * @throws IllegalArgumentException Če stanje ni eno izmed dovoljenih ("nov", "popravljen", "slab")
     */
    public void setStanje(String stanje) throws IllegalArgumentException {
        if (!stanje.equals("nov") && !stanje.equals("popravljen") && !stanje.equals("slab")) {
            throw new IllegalArgumentException("Neveljavno stanje ceste. Možnosti so: nov, popravljen, slab.");
        }
        this.stanje = stanje;
    }

    /**
     * Izvede popravilo ceste, če stanje ceste ni "nov".
     * 
     * Po popravilu se stanje ceste spremeni na "popravljen".
     * 
     * @throws IllegalStateException Če je cesta že nova, saj popravilo ni potrebno
     */
    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.");
    }

    /**
     * Poveča dolžino ceste za določeno vrednost.
     * 
     * @param dodatnaDolzina Dodana dolžina v kilometrih
     * @throws IllegalArgumentException Če je dodatna dolžina manjša ali enaka 0
     */
    public void posodobiDolzino(double dodatnaDolzina) throws IllegalArgumentException {
        if (dodatnaDolzina <= 0) {
            throw new IllegalArgumentException("Dodatna dolžina mora biti pozitivna vrednost.");
        }
        this.dolzina += dodatnaDolzina;
        System.out.println("Dolžina ceste je bila povečana za " + dodatnaDolzina + " km.");
    }
}
