package databases;

import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class Client
{
	private int id;
	private String nom;
	private String prenom;
	private String adresse;
	private String postal;
	private String ville;
	private Date naiss;
	
	public Client(int pId)
	{
		charger(pId);
	}
	
	// Setters
	public void setId(int pId)
	{
		this.id = pId;
	}

	public void setNom(String pChaine)
	{
		this.nom = pChaine;
	}
	
	public void setPrenom(String pChaine)
	{
		this.prenom = pChaine;
	}
	
	public void setAdresse(String pChaine)
	{
		this.adresse = pChaine;
	}
	
	public void setPostal (String pChaine)
	{
		this.postal = pChaine;
	}
	
	public void setVille(String pChaine)
	{
		this.ville = pChaine;
	}
	
	public void setNaiss (Date pNaiss)
	{
		this.naiss = pNaiss;
	}
	
	// Getters
	public int getId()
	{
		return (this.id);
	}
	public String getNom()
	{
		return (this.nom);
	}
	
	public String getPrenom()
	{
		return(this.prenom);
	}
	
	public String getAdresse()
	{
		return (this.adresse);
	}
	public String getPostal()
	{
		return (this.postal);
	}
	
	public String getVille()
	{
		return (this.ville);
	}
	
	public Date getNaiss()
	{
		return (this.naiss);
	}
	
	
	public String toString()
	{
		String sortie=this.getId() + "| " +
					this.getNom() + "| " +
					this.getPrenom() + "| " +
					this.getAdresse() + "| " +
					this.getPostal() + "| " +
					this.getVille() + "| " +
					this.getNaiss();
		return (sortie);
	}
	
	/**
	 * Charge les données de la BD
	 * 
	 */
	private void charger(int pId)
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("Le pilote MySql existe");
			java.sql.Connection maConnexion = DriverManager.getConnection("jdbc:mysql://localhost/helha_clients", "helha_grad2", "cocoNuts");
			System.out.println("Connexion établie");
			java.sql.PreparedStatement monStatement = maConnexion.prepareStatement("SELECT * FROM t_clients WHERE id = ?");
			monStatement.setInt(1, pId);
			ResultSet monQuery = monStatement.executeQuery();
			System.out.println("La requête est ouverte");
			//System.out.println(monStatement);
			
			System.out.println("\nMéta-données :");
			java.sql.ResultSetMetaData mesColonnes = monQuery.getMetaData();
			System.out.println(mesColonnes.getColumnCount() + " colonnes");
			for (int i=1; i <= mesColonnes.getColumnCount(); i++)
			{
				System.out.print(mesColonnes.getColumnName(i) + " - ");
			}
			System.out.println("]");
			
			//System.out.println("\nDonnées :");
			while(monQuery.next())
			{
				System.out.println(monQuery.getString("id") + " " + monQuery.getString("nom")+ " " + monQuery.getString("prenom") + " " + monQuery.getString("adresse")+ " " + monQuery.getString("postal") + " " + monQuery.getString("ville")+ " " + monQuery.getString("naiss"));
			}
			
			if(monQuery.first())
			{
				this.setId(monQuery.getInt("id"));
				this.setNom(monQuery.getString("nom"));
				this.setPrenom(monQuery.getString("prenom"));
				this.setAdresse(monQuery.getString("adresse"));
				this.setPostal(monQuery.getString("postal"));
				this.setVille(monQuery.getString("ville"));
				this.setNaiss(monQuery.getDate("naiss"));
			}
			else
			{
				this.setId(0);
				this.setNom("Client inconnu !");
				//System.err.println("Le client " + pId + " n'existe pas !");
			}
			
			//System.out.println("]");
			monQuery.close();
			monStatement.close();
			maConnexion.close();
		}
		catch (Exception e)
		{
			//System.out.println("Erreur");
			e.printStackTrace();
		}
	}
	
	/*
	 * Enregistre le client dans la BD
	 */
	public void sauver()
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			//System.out.println("Le pilote MySql existe");
			java.sql.Connection maConnexion = DriverManager.getConnection("jdbc:mysql://localhost/helha_clients", "helha_grad2", "cocoNuts");
			//System.out.println("Connexion établie");
			java.sql.Statement monStatement = maConnexion.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
			ResultSet monQuery = monStatement.executeQuery("SELECT * FROM t_clients WHERE id = " + this.getId());
			//System.err.println(this.getNom());
			monQuery.first();
			monQuery.updateString("nom", this.getNom());
			monQuery.updateString("prenom", this.getPrenom());
			monQuery.updateString("adresse", this.getAdresse());
			monQuery.updateString("postal", this.getPostal());
			monQuery.updateString("ville", this.getVille());
			monQuery.updateDate("naiss", this.getNaiss());

			monQuery.updateRow();
			monQuery.close();
			monStatement.close();
			maConnexion.close();
		}
		catch (Exception e)
		{
			//System.out.println("Erreur");
			e.printStackTrace();
		}
	}
}