/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package testbdd2;

import com.mysql.jdbc.Connection;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
//import javax.swing.JOptionPane;
import javax.swing.JTextField;

/**
 *
 * @author cedrickaiser2
 */
public class Film extends JFrame implements ActionListener {

    static final String ACTION_RETOUR = "Retour";
    static final String ACTION_VALIDER = "Valider";
    static final String ACTION_NEW_REAL = "NewReal";
    static final String ACTION_NEW_GENRE = "NewGenre";
    private String nomFilm;
    private String genreFilm;
    private String realisateur;
    private JLabel message;
    private JLabel lblNomFilm;
    private JLabel lblGenreFilm;
    private JLabel lblRealisateur;
    private JTextField tfNomFilm;
    private JComboBox cbRealisateur;
    private JComboBox cbGenre;
    private JButton valider;
    private JButton retour;
    private JButton btNewReal;
    private JButton btNewGenre;
    private Connection connec;

    Film() {
        this.setTitle("Nouveau film");
        this.setLayout(null);

        this.setLocation(100, 100);

        message = new JLabel("Entrer un nouveau film");
        message.setBounds(10, 10, 500, 20);

        lblNomFilm = new JLabel("Nom du film");
        lblNomFilm.setBounds(10, 30, 150, 20);

        tfNomFilm = new JTextField();
        tfNomFilm.setBounds(130, 30, 150, 20);

        lblGenreFilm = new JLabel("Genre du film");
        lblGenreFilm.setBounds(10, 50, 150, 20);

        cbGenre = new JComboBox();
        cbGenre.setBounds(130, 50, 150, 20);

        btNewGenre = new JButton(ACTION_NEW_GENRE);
        btNewGenre.setBounds(280, 50, 100, 20);
        btNewGenre.addActionListener(this);

        lblRealisateur = new JLabel("Nom du réalisateur");
        lblRealisateur.setBounds(10, 70, 150, 20);

        cbRealisateur = new JComboBox();
        cbRealisateur.setBounds(130, 70, 150, 20);

        retour = new JButton(ACTION_RETOUR);
        retour.setBounds(10, 90, 100, 20);
        retour.addActionListener(this);

        btNewReal = new JButton(ACTION_NEW_REAL);
        btNewReal.setBounds(280, 70, 100, 20);
        btNewReal.addActionListener(this);

        valider = new JButton(ACTION_VALIDER);
        valider.setBounds(200, 90, 100, 20);
        valider.addActionListener(this);

        this.getContentPane().add(message);
        this.getContentPane().add(lblNomFilm);
        this.getContentPane().add(tfNomFilm);
        this.getContentPane().add(lblGenreFilm);
        this.getContentPane().add(cbGenre);
        this.getContentPane().add(lblRealisateur);
        this.getContentPane().add(cbRealisateur);
        this.getContentPane().add(valider);
        this.getContentPane().add(retour);
        this.getContentPane().add(btNewReal);
        this.getContentPane().add(btNewGenre);

        this.setSize(500, 300);
        this.setResizable(false);
        this.setVisible(true);

        this.afficheRealisateur();
        this.afficheGenre();
    }

    public void afficheRealisateur(){
        ConnectionBDD cbdd = ConnectionBDD.getInstance();
        connec = (Connection) cbdd.getConnexion();

        cbRealisateur.removeAllItems();

        String requete = "select nomRealisateur from realisateur order by nomRealisateur asc";

        Statement st;
        try {
            st = connec.createStatement();
            ResultSet rs = st.executeQuery(requete);

            while (rs.next()) {
                cbRealisateur.addItem(rs.getString("nomRealisateur"));   
            }
        } catch (SQLException ex) {
            System.out.println("Erreur d'insertion d'informations dans la Base de Données : " + ex.getMessage());
        }
    }

    public void afficheGenre(){
        ConnectionBDD cbdd = ConnectionBDD.getInstance();
        connec = (Connection) cbdd.getConnexion();

        cbGenre.removeAllItems();

        String requete = "select nomGenre from genre order by nomGenre asc";

        Statement st;
        try {
            st = (Statement) connec.createStatement();
            ResultSet rs = st.executeQuery(requete);

            while (rs.next()) {
                cbGenre.addItem(rs.getString("nomGenre"));
            }
        } catch (SQLException ex) {
            System.out.println("Erreur d'insertion d'informations dans la Base de Données : " + ex.getMessage());
        }
    }

    public int getId(String nom, String table, String champCherche, String champRetourne){
        ConnectionBDD cbdd = ConnectionBDD.getInstance();
        connec = (Connection) cbdd.getConnexion();
        int id = 0;
        
        String requete = "select " + champRetourne + " from " + table + " where " + champCherche + " = \'" + nom + "\' ";
        System.out.println(requete);
        Statement st;
        try {
            st = (Statement) connec.createStatement();
            ResultSet rs = st.executeQuery(requete);
            if(rs.next()){
                id = rs.getInt(champRetourne);
            }
        } catch (SQLException ex) {
            System.out.println("Erreur de selection d'informations dans la Base de Données : " + ex.getMessage());
        }

        return id;
    }


    public void actionPerformed(ActionEvent e) {
        String action = e.getActionCommand();

        ConnectionBDD cbdd = ConnectionBDD.getInstance();
        connec = (Connection) cbdd.getConnexion();

        if (action.equals(ACTION_RETOUR)) {
            this.dispose();

        } else if (action.equals(ACTION_NEW_REAL)) {
            Realisateur real = new Realisateur(this);
            this.afficheRealisateur();
        } else if (action.equals(ACTION_NEW_GENRE)) {
            Genre genre = new Genre();
            this.afficheGenre();
        } else if (action.equals(ACTION_VALIDER)) {
            nomFilm = tfNomFilm.getText();
            genreFilm = (String) cbGenre.getSelectedItem();
            realisateur = (String) cbRealisateur.getSelectedItem();

//            String requete =    "insert into film(nomFilm, idGenre, idRealisateur) "+
//                                "values('" + nomFilm + "','" + genreFilm + "','" + realisateur + "')";

            //String rq2 = "";

            //String rq3 = "";
            int idGenre = getId(genreFilm, "genre", "nomGenre", "id");
            int idRealisateur = getId(realisateur, "realisateur", "nomRealisateur", "id");
            
            String requete =    "insert into film(nomFilm, idGenre, idRealisateur) "+
                                "values('" + nomFilm + "', '" + idGenre +"', '" + idRealisateur +"') ";

            System.out.println(requete);

            Statement st;
            try {
                st = (Statement) connec.createStatement();
                st.executeUpdate(requete);
                //JOptionPane.showMessageDialog(null, "Le film " + nomFilm + " a bien été ajouté.");
            } catch (SQLException ex) {
                System.out.println("Erreur d'insertion d'informations dans la Base de Données : " + ex.getMessage());
            }
            this.dispose();
           

        }

    }
}
