import java.util.Scanner;

/**
 * Razred GorskaCesta predstavlja gorsko cesto, ki podeduje lastnosti razreda Cesta
 * in dodaja dodatne informacije, kot so prisotnost tunela in serpentin.
 * Omogoča prikaz informacij o gorski cesti, preverjanje varnosti vožnje ter
 * ustvarjanje objekta iz vnosa z ukazne konzole.
 */
public class GorskaCesta extends Cesta {
    private boolean imaTunel; // Ali gorska cesta vsebuje tunel
    private boolean imaSerpentine; // Ali gorska cesta vsebuje serpentine

    /**
     * Konstruktor za inicializacijo objekta GorskaCesta.
     *
     * @param ime Ime gorske ceste
     * @param dolzina Dolžina gorske ceste v kilometrih
     * @param material Material gorske ceste (asfalt, makadam, itd.)
     * @param imaTunel Ali gorska cesta vsebuje tunel
     * @param imaSerpentine Ali gorska cesta vsebuje serpentine
     */
    public GorskaCesta(String ime, double dolzina, String material, boolean imaTunel, boolean imaSerpentine) {
        super(ime, dolzina, material);
        this.imaTunel = imaTunel;
        this.imaSerpentine = imaSerpentine;
    }

    /**
     * Prikazuje informacije o gorski cesti na standardnem izhodu.
     * Izpiše vse informacije, ki jih pridobi iz razreda Cesta, skupaj z informacijami
     * o prisotnosti tunela in serpentin.
     */
    @Override
    public void prikaziInformacije() {
        super.prikaziInformacije();
        System.out.println("Ima tunel: " + (imaTunel ? "Da" : "Ne"));
        System.out.println("Ima serpentine: " + (imaSerpentine ? "Da" : "Ne"));
    }

    /**
     * Preveri varnost vožnje po gorski cesti.
     * 
     * Gorske ceste s serpentinami so ocenjene kot manj varne.
     *
     * @return <code>true</code> če cesta ne vsebuje serpentin, sicer <code>false</code>
     */
    public boolean preveriVarnoVožnjo() {
        return imaSerpentine ? false : true;
    }

    /**
     * Ustvari nov objekt GorskaCesta iz vnosa z ukazne konzole.
     * 
     * Uporabnik vnese ime, dolžino, material, prisotnost tunela in prisotnost serpentin.
     * Ta metoda prebere te informacije iz ukazne konzole in vrne novo instanco GorskaCesta.
     *
     * @return Nova instanca GorskaCesta
     */
    public static GorskaCesta ustvariIzKonzole() {
        Scanner scanner = new Scanner(System.in);

        // Ustvari osnovni objekt Cesta preko ukazne konzole
        Cesta cesta = Cesta.ustvariIzKonzole();

        // Pridobi informacije specifične za GorskaCesta
        System.out.print("Ali cesta vsebuje tunel (da/ne): ");
        boolean imaTunel = scanner.nextLine().equalsIgnoreCase("da");

        System.out.print("Ali cesta vsebuje serpentine (da/ne): ");
        boolean imaSerpentine = scanner.nextLine().equalsIgnoreCase("da");

        return new GorskaCesta(cesta.getIme(), cesta.getDolzina(), cesta.getMaterial(), imaTunel, imaSerpentine);
    }
}
