import java.util.Scanner;

/**
 * Razred MainProgram vsebuje metodo main, ki omogoča interakcijo z uporabnikom preko ukazne konzole
 * za ustvarjanje in upravljanje objektov razredov AsfaltnaCesta in GorskaCesta.
 * 
 * Program omogoča:
 * - Vnos podatkov za ustvarjanje asfaltne ceste
 * - Vnos podatkov za ustvarjanje gorske ceste
 * - Posodobitev dolžine asfaltne ceste
 * - Posodobitev visinske razlike gorske ceste
 * 
 * Program obdeluje morebitne napake, ki se pojavijo pri nepravilnem vnosu podatkov.
 */
public class MainProgram {
    /**
     * Glavna metoda programa, ki se zažene ob izvajanju programa.
     * 
     * Omogoča interakcijo z uporabnikom preko ukazne konzole, da vnese podatke
     * za ustvarjanje objektov AsfaltnaCesta in GorskaCesta, ter izvede različne operacije
     * nad temi objekti, kot so dodajanje oznak in posodabljanje dolžine ali visinske razlike.
     * 
     * @param args Argumenti ukazne vrstice (ne uporabljeni)
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        try {
            System.out.println("Ustvarjanje asfaltne ceste:");
            System.out.print("Vnesite ime ceste: ");
            String imeAsfaltneCeste = scanner.nextLine();
            
            System.out.print("Vnesite dolžino ceste v kilometrih: ");
            double dolzinaAsfaltneCeste = scanner.nextDouble();
            scanner.nextLine(); // Čiščenje nove vrstice
            
            System.out.print("Vnesite stanje ceste (nov, popravljen, slab): ");
            String stanjeAsfaltneCeste = scanner.nextLine();
            
            System.out.print("Ali ima cesta prometne oznake (true/false): ");
            boolean imaOznakeAsfaltneCeste = scanner.nextBoolean();
            
            AsfaltnaCesta asfaltnaCesta = new AsfaltnaCesta(imeAsfaltneCeste, dolzinaAsfaltneCeste, stanjeAsfaltneCeste, imaOznakeAsfaltneCeste);
            
            asfaltnaCesta.dodajOznake();
            
            System.out.println("Ustvarjanje gorske ceste:");
            scanner.nextLine(); // Čiščenje nove vrstice
            System.out.print("Vnesite ime ceste: ");
            String imeGorskeCeste = scanner.nextLine();
            
            System.out.print("Vnesite dolžino ceste v kilometrih: ");
            double dolzinaGorskeCeste = scanner.nextDouble();
            scanner.nextLine(); // Čiščenje nove vrstice
            
            System.out.print("Vnesite stanje ceste (nov, popravljen, slab): ");
            String stanjeGorskeCeste = scanner.nextLine();
            
            System.out.print("Vnesite visinsko razliko ceste v metrih: ");
            double visinskaRazlikaGorskeCeste = scanner.nextDouble();
            
            GorskaCesta gorskaCesta = new GorskaCesta(imeGorskeCeste, dolzinaGorskeCeste, stanjeGorskeCeste, visinskaRazlikaGorskeCeste);
            
            gorskaCesta.posodobiVisinskoRazliko(100); // Dodaj 100 metrov
            
            System.out.print("Vnesite dodatno dolžino za asfaltno cesto: ");
            double dodatnaDolzina = scanner.nextDouble();
            asfaltnaCesta.posodobiDolzino(dodatnaDolzina);

        // Napake
        } catch (IllegalArgumentException e) {
            System.out.println("Napaka: " + e.getMessage());
        } catch (IllegalStateException e) {
            System.out.println("Napaka: " + e.getMessage());
        }
    }
}
