import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class CestaGUI extends JFrame {
    private CestaTableModel tableModel;
    private JTextField imeField;
    private JTextField dolzinaField;
    private JTextField stevilkaField;
    private JTextField dodatneField;
    private JComboBox<String> vrstaComboBox;
    private JCheckBox asfaltiranaCheckBox;
    private JTextField maxHitrostField;

    public CestaGUI() {
        setTitle("Seznam Cest");
        setSize(700, 400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLayout(new BorderLayout());

        // Tabela za prikaz cest
        tableModel = new CestaTableModel();
        JTable table = new JTable(tableModel);
        JScrollPane scrollPane = new JScrollPane(table);
        add(scrollPane, BorderLayout.CENTER);

        // Panel za vnose
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(6, 2));

        // Dodajanje komponent v panel
        panel.add(new JLabel("Ime:"));
        imeField = new JTextField();
        panel.add(imeField);

        panel.add(new JLabel("Dolžina (km):"));
        dolzinaField = new JTextField();
        panel.add(dolzinaField);

        panel.add(new JLabel("Številka:"));
        stevilkaField = new JTextField();
        panel.add(stevilkaField);

        panel.add(new JLabel("Vrsta:"));
        vrstaComboBox = new JComboBox<>(new String[]{"Avtocesta", "Kmečka cesta"});
        panel.add(vrstaComboBox);

        panel.add(new JLabel("Dodatne Informacije:"));
        dodatneField = new JTextField();
        panel.add(dodatneField);

        maxHitrostField = new JTextField();
        panel.add(new JLabel("Max Hitrost (le za avtoceste):"));
        panel.add(maxHitrostField);

        asfaltiranaCheckBox = new JCheckBox("Asfaltirana (le za kmečke ceste)");
        panel.add(asfaltiranaCheckBox);

        JButton dodajButton = new JButton("Dodaj Cesto");
        panel.add(dodajButton);
        add(panel, BorderLayout.SOUTH);

        // Akcija za gumb dodaj
        dodajButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dodajCesto();
            }
        });

        setVisible(true);
    }

    private void dodajCesto() {
        try {
            // Pridobivanje vnosov iz obrazca
            String ime = imeField.getText();
            double dolzina = Double.parseDouble(dolzinaField.getText());
            int stevilka = Integer.parseInt(stevilkaField.getText());
            String vrsta = (String) vrstaComboBox.getSelectedItem();

            if (ime.isEmpty()) {
                JOptionPane.showMessageDialog(this, "Ime ceste ne sme biti prazno!", "Napaka", JOptionPane.ERROR_MESSAGE);
                return;
            }

            // Ustvarjanje primerne ceste glede na vrsto
            Cesta cesta = null;
            if (vrsta.equals("Avtocesta")) {
                int maxHitrost = Integer.parseInt(maxHitrostField.getText());
                cesta = new Avtocesta(ime, dolzina, stevilka, maxHitrost);
            } else if (vrsta.equals("Kmečka cesta")) {
                boolean asfaltirana = asfaltiranaCheckBox.isSelected();
                cesta = new KmeckaCesta(ime, dolzina, stevilka, asfaltirana);
            }

            // Dodajanje ceste v tabelo
            if (cesta != null) {
                tableModel.addCesta(cesta);
                // Ponastavitev obrazca po dodajanju
                imeField.setText("");
                dolzinaField.setText("");
                stevilkaField.setText("");
                dodatneField.setText("");
                maxHitrostField.setText("");
                asfaltiranaCheckBox.setSelected(false);
            }
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "Prosim, vnesite veljavne številke!", "Napaka", JOptionPane.ERROR_MESSAGE);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(CestaGUI::new);
    }
}
