package hotelrejestracja;

public class MainForm extends javax.swing.JFrame {

    public MainForm() {
        initComponents();
        customInit();
    }

    private void customInit() {
        try {
            java.net.URL iconUrl = getClass().getResource("/hotelrejestracja/hotel.png");
            if (iconUrl != null) {
                setIconImage(new javax.swing.ImageIcon(iconUrl).getImage());
            }
        } catch (Exception e) {  }

        getContentPane().setBackground(new java.awt.Color(0x00, 0xBF, 0xFF));
        java.awt.Color bg = new java.awt.Color(0x00, 0xBF, 0xFF);
        lblImie.setBackground(bg);       lblImie.setOpaque(true);
        lblNazwisko.setBackground(bg);   lblNazwisko.setOpaque(true);
        lblPesel.setBackground(bg);      lblPesel.setOpaque(true);
        lblNumerPokoju.setBackground(bg); lblNumerPokoju.setOpaque(true);
        lblCena.setBackground(bg);       lblCena.setOpaque(true);
        lblLiczbaOsob.setBackground(bg); lblLiczbaOsob.setOpaque(true);
        lblStandard.setBackground(bg);   lblStandard.setOpaque(true);

        setLocationRelativeTo(null);
    }

    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    @SuppressWarnings("unchecked")
    private void initComponents() {

        lblImie = new javax.swing.JLabel();
        tfImie = new javax.swing.JTextField();
        lblNazwisko = new javax.swing.JLabel();
        tfNazwisko = new javax.swing.JTextField();
        lblPesel = new javax.swing.JLabel();
        tfPesel = new javax.swing.JTextField();
        lblNumerPokoju = new javax.swing.JLabel();
        tfNumerPokoju = new javax.swing.JTextField();
        btnInfo = new javax.swing.JButton();
        lblCena = new javax.swing.JLabel();
        tfCena = new javax.swing.JTextField();
        lblLiczbaOsob = new javax.swing.JLabel();
        tfLiczbaOsob = new javax.swing.JTextField();
        lblStandard = new javax.swing.JLabel();
        cbStandard = new javax.swing.JComboBox<>();
        btnZarejestruj = new javax.swing.JButton();
        btnPokaz = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("System rejestracji hotelowej");
        setResizable(false);
        getContentPane().setBackground(new java.awt.Color(0, 191, 255));

        lblImie.setFont(new java.awt.Font("Arial", 0, 14));
        lblImie.setForeground(java.awt.Color.BLACK);
        lblImie.setText("Imię:");

        tfImie.setFont(new java.awt.Font("Arial", 0, 14));

        lblNazwisko.setFont(new java.awt.Font("Arial", 0, 14));
        lblNazwisko.setForeground(java.awt.Color.BLACK);
        lblNazwisko.setText("Nazwisko:");

        tfNazwisko.setFont(new java.awt.Font("Arial", 0, 14));

        lblPesel.setFont(new java.awt.Font("Arial", 0, 14));
        lblPesel.setForeground(java.awt.Color.BLACK);
        lblPesel.setText("PESEL:");

        tfPesel.setFont(new java.awt.Font("Arial", 0, 14));

        lblNumerPokoju.setFont(new java.awt.Font("Arial", 0, 14));
        lblNumerPokoju.setForeground(java.awt.Color.BLACK);
        lblNumerPokoju.setText("Numer pokoju:");

        tfNumerPokoju.setFont(new java.awt.Font("Arial", 0, 14));

        btnInfo.setBackground(new java.awt.Color(85, 85, 85));
        btnInfo.setFont(new java.awt.Font("Arial", 0, 14));
        btnInfo.setForeground(java.awt.Color.WHITE);
        btnInfo.setText("Info o pokojach");
        btnInfo.setOpaque(true);
        btnInfo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnInfoActionPerformed(evt);
            }
        });

        lblCena.setFont(new java.awt.Font("Arial", 0, 14));
        lblCena.setForeground(java.awt.Color.BLACK);
        lblCena.setText("Cena za dobę:");

        tfCena.setFont(new java.awt.Font("Arial", 0, 14));

        lblLiczbaOsob.setFont(new java.awt.Font("Arial", 0, 14));
        lblLiczbaOsob.setForeground(java.awt.Color.BLACK);
        lblLiczbaOsob.setText("Liczba osób:");

        tfLiczbaOsob.setFont(new java.awt.Font("Arial", 0, 14));

        lblStandard.setFont(new java.awt.Font("Arial", 0, 14));
        lblStandard.setForeground(java.awt.Color.BLACK);
        lblStandard.setText("Standard:");

        cbStandard.setFont(new java.awt.Font("Arial", 0, 14));
        cbStandard.setModel(new javax.swing.DefaultComboBoxModel<>(
            new String[]{"Standard", "Deluxe", "Apartament"}));

        btnZarejestruj.setFont(new java.awt.Font("Arial", 0, 14));
        btnZarejestruj.setText("Zarejestruj");
        btnZarejestruj.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnZarejestrujActionPerformed(evt);
            }
        });

        btnPokaz.setBackground(java.awt.Color.RED);
        btnPokaz.setFont(new java.awt.Font("Arial", 0, 14));
        btnPokaz.setForeground(java.awt.Color.WHITE);
        btnPokaz.setText("Pokaż dane");
        btnPokaz.setOpaque(true);
        btnPokaz.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPokazActionPerformed(evt);
            }
        });

        // ---- Layout wygenerowany przez GUI Builder (GroupLayout) ----
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);

        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(30)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    // Imię
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblImie, 130, 130, 130)
                        .addGap(10)
                        .addComponent(tfImie, 200, 200, 200))
                    // Nazwisko
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblNazwisko, 130, 130, 130)
                        .addGap(10)
                        .addComponent(tfNazwisko, 200, 200, 200))
                    // PESEL
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblPesel, 130, 130, 130)
                        .addGap(10)
                        .addComponent(tfPesel, 200, 200, 200))
                    // Numer pokoju + btnInfo
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblNumerPokoju, 130, 130, 130)
                        .addGap(10)
                        .addComponent(tfNumerPokoju, 120, 120, 120)
                        .addGap(10)
                        .addComponent(btnInfo, 130, 130, 130))
                    // Cena
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblCena, 130, 130, 130)
                        .addGap(10)
                        .addComponent(tfCena, 200, 200, 200))
                    // Liczba osób
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblLiczbaOsob, 130, 130, 130)
                        .addGap(10)
                        .addComponent(tfLiczbaOsob, 200, 200, 200))
                    // Standard
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblStandard, 130, 130, 130)
                        .addGap(10)
                        .addComponent(cbStandard, 200, 200, 200))
                    // Przyciski
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnZarejestruj, 140, 140, 140)
                        .addGap(20)
                        .addComponent(btnPokaz, 140, 140, 140))
                )
                .addContainerGap(30, Short.MAX_VALUE))
        );

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(20)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblImie, 30, 30, 30)
                    .addComponent(tfImie, 30, 30, 30))
                .addGap(10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNazwisko, 30, 30, 30)
                    .addComponent(tfNazwisko, 30, 30, 30))
                .addGap(10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblPesel, 30, 30, 30)
                    .addComponent(tfPesel, 30, 30, 30))
                .addGap(10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNumerPokoju, 30, 30, 30)
                    .addComponent(tfNumerPokoju, 30, 30, 30)
                    .addComponent(btnInfo, 30, 30, 30))
                .addGap(10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblCena, 30, 30, 30)
                    .addComponent(tfCena, 30, 30, 30))
                .addGap(10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblLiczbaOsob, 30, 30, 30)
                    .addComponent(tfLiczbaOsob, 30, 30, 30))
                .addGap(10)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblStandard, 30, 30, 30)
                    .addComponent(cbStandard, 30, 30, 30))
                .addGap(20)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnZarejestruj, 35, 35, 35)
                    .addComponent(btnPokaz, 35, 35, 35))
                .addGap(20))
        );

        pack();
    }// </editor-fold>

    private void btnInfoActionPerformed(java.awt.event.ActionEvent evt) {
        RoomInfoDialog dlg = new RoomInfoDialog(this, true);
        dlg.setVisible(true);
    }

    private void btnZarejestrujActionPerformed(java.awt.event.ActionEvent evt) {
        if (waliduj()) {
            javax.swing.JOptionPane.showMessageDialog(this,
                "Gość zarejestrowany pomyślnie!",
                "Rejestracja", javax.swing.JOptionPane.INFORMATION_MESSAGE);
        } else {
            javax.swing.JOptionPane.showMessageDialog(this,
                "Popraw błędne pola (zaznaczone na czerwono).",
                "Błąd walidacji", javax.swing.JOptionPane.ERROR_MESSAGE);
        }
    }

    private void btnPokazActionPerformed(java.awt.event.ActionEvent evt) {
        if (!waliduj()) {
            javax.swing.JOptionPane.showMessageDialog(this,
                "Popraw błędne pola przed wyświetleniem danych.",
                "Błąd walidacji", javax.swing.JOptionPane.ERROR_MESSAGE);
            return;
        }

        String imie      = tfImie.getText().trim();
        String nazwisko  = tfNazwisko.getText().trim();
        String pesel     = tfPesel.getText().trim();
        String pokoj     = tfNumerPokoju.getText().trim();
        String standard  = (String) cbStandard.getSelectedItem();
        double cena      = Double.parseDouble(tfCena.getText().trim());
        int    osoby     = Integer.parseInt(tfLiczbaOsob.getText().trim());

        double laczny = cena * osoby;
        String rabatInfo = "";
        if (laczny > 5000) {
            double rabat = laczny * 0.10;
            laczny -= rabat;
            rabatInfo = String.format("%nRabat 10%%: -%.2f zł", rabat);
        }

        String msg = String.format(
            "Imię i nazwisko : %s %s%n" +
            "PESEL           : %s%n" +
            "Numer pokoju    : %s%n" +
            "Standard        : %s%n" +
            "Cena za dobę    : %.2f zł%n" +
            "Liczba osób     : %d%n" +
            "──────────────────────────%s%n" +
            "Łączny koszt    : %.2f zł",
            imie, nazwisko, pesel, pokoj, standard,
            cena, osoby, rabatInfo, laczny
        );

        javax.swing.JTextArea ta = new javax.swing.JTextArea(msg);
        ta.setFont(new java.awt.Font("Arial", java.awt.Font.PLAIN, 14));
        ta.setEditable(false);
        ta.setBackground(new java.awt.Color(0xFF, 0xF9, 0xE3));
        ta.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));

        javax.swing.JOptionPane.showMessageDialog(this, ta,
            "Dane gościa", javax.swing.JOptionPane.INFORMATION_MESSAGE);
    }
    private boolean waliduj() {
        boolean ok = true;

        tfImie.setForeground(java.awt.Color.BLACK);
        tfNazwisko.setForeground(java.awt.Color.BLACK);
        tfPesel.setForeground(java.awt.Color.BLACK);
        tfNumerPokoju.setForeground(java.awt.Color.BLACK);
        tfCena.setForeground(java.awt.Color.BLACK);
        tfLiczbaOsob.setForeground(java.awt.Color.BLACK);

        if (tfImie.getText().trim().isEmpty()) {
            tfImie.setForeground(java.awt.Color.RED); ok = false;
        }
        if (tfNazwisko.getText().trim().isEmpty()) {
            tfNazwisko.setForeground(java.awt.Color.RED); ok = false;
        }
        if (tfPesel.getText().trim().length() != 11) {
            tfPesel.setForeground(java.awt.Color.RED); ok = false;
        }
        if (tfNumerPokoju.getText().trim().isEmpty()) {
            tfNumerPokoju.setForeground(java.awt.Color.RED); ok = false;
        }
        try {
            double c = Double.parseDouble(tfCena.getText().trim());
            if (c <= 0) { tfCena.setForeground(java.awt.Color.RED); ok = false; }
        } catch (NumberFormatException e) {
            tfCena.setForeground(java.awt.Color.RED); ok = false;
        }
        try {
            int o = Integer.parseInt(tfLiczbaOsob.getText().trim());
            if (o < 1) { tfLiczbaOsob.setForeground(java.awt.Color.RED); ok = false; }
        } catch (NumberFormatException e) {
            tfLiczbaOsob.setForeground(java.awt.Color.RED); ok = false;
        }
        return ok;
    }

    private javax.swing.JButton btnInfo;
    private javax.swing.JButton btnPokaz;
    private javax.swing.JButton btnZarejestruj;
    private javax.swing.JComboBox<String> cbStandard;
    private javax.swing.JLabel lblCena;
    private javax.swing.JLabel lblImie;
    private javax.swing.JLabel lblLiczbaOsob;
    private javax.swing.JLabel lblNumerPokoju;
    private javax.swing.JLabel lblPesel;
    private javax.swing.JLabel lblNazwisko;
    private javax.swing.JLabel lblStandard;
    private javax.swing.JTextField tfCena;
    private javax.swing.JTextField tfImie;
    private javax.swing.JTextField tfLiczbaOsob;
    private javax.swing.JTextField tfNazwisko;
    private javax.swing.JTextField tfNumerPokoju;
    private javax.swing.JTextField tfPesel;
}
