package com.eyrolles;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.annotation.PostConstruct;

import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.eyrolles.model.Auteur;
import com.eyrolles.model.Categorie;
import com.eyrolles.model.Client;
import com.eyrolles.model.Livre;
import com.eyrolles.model.Publieur;
import com.eyrolles.model.SousCategorie;
import com.eyrolles.model.Theme;
import com.eyrolles.service.IClientService;
import com.eyrolles.service.ILivreService;
import com.eyrolles.service.IThemeService;
import com.eyrolles.util.Crypt;


@Component
public class Startup {
	@Autowired
	IThemeService serviceTheme;
	@Autowired
	ILivreService serviceLivre;
	@Autowired
	IClientService serviceClient;
	public static Date ParseDate(String myDate)
	{
	
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	sdf.setLenient(true);
  	Date d = new Date();
	  	
  	try {
	   d = sdf.parse(myDate );
	   String t = sdf.format(d);
	  
	   if(t.compareTo(myDate) !=  0)
		  	throw new Exception("MESSAGE ERREUR");
	   return(d);
			  	
  	} catch (Exception e) {
		   // --- Gestion mauvaise date
  	}
  	 return(d);
	}
	
	@PostConstruct
	public void execute() throws FileNotFoundException, IOException {
		
		 	Client cl1 = new Client("Jebnoun", "Hadhemi", "Mlle", "hadhemi.jebnoun@gmail.com",Crypt.encryptPassword("hadhemi"),true,true);
	  	  	serviceClient.create(cl1);
	  	  	Client cl2 = new Client("Ben braiek", "Houssem", "Mr", "houssem.benbraiek@gmail.com",Crypt.encryptPassword("houssem"),true,true);
	  	  	serviceClient.create(cl2);
		
		// ~~~ themes ~~~
		Theme t1= new Theme("Informatique");
		Theme t2= new Theme("Sciences");
		Theme t3= new Theme("Entreprise");
		Theme t4= new Theme("Vie Pratique");
		Theme t5= new Theme("Graphisme & photo");
		
		serviceTheme.add(t1);
		serviceTheme.add(t2);
		serviceTheme.add(t3);
		serviceTheme.add(t4);
		serviceTheme.add(t5);

		// ~~~ Categories ~~~
		       // theme info
		Categorie g1= new Categorie("développement", t1);
		Categorie g2= new Categorie("Hardware", t1);
		Categorie g3= new Categorie("BDD", t1);
		Categorie g4= new Categorie("Systèmes d'exploitation", t1);  
		
		
		serviceTheme.add(t1,g1);
		serviceTheme.add(t1, g2);
		serviceTheme.add(t1,g3);
		serviceTheme.add(t1, g4);
		
		      // theme sciences
		
		Categorie g5= new Categorie("Sciences de la vie", t2);
		Categorie g6= new Categorie("Sciences de la terre", t2);
		Categorie g7= new Categorie("Physique", t2);
		Categorie g8= new Categorie("Chimie", t2);
		
		
		serviceTheme.add(t2,g5);
		serviceTheme.add(t2, g6);
		serviceTheme.add(t2,g7);
		serviceTheme.add(t2, g8);
		
		// theme entreprise
		Categorie g9= new Categorie("Economie", t3);
		Categorie g10= new Categorie("RH & Formation", t3);
		Categorie g11= new Categorie("Marketing et ventes", t3);
		Categorie g12= new Categorie("Finacne", t3);
		
		
				serviceTheme.add(t3,g9);
				serviceTheme.add(t3, g10);
				serviceTheme.add(t3,g11);
				serviceTheme.add(t3, g12);

		
				
				// theme vie pratique
				Categorie g13= new Categorie("Cuisine", t4);
				Categorie g14= new Categorie("Santé et bien-être", t4);
				Categorie g15= new Categorie("Art & Loisirs", t4);
				Categorie g16= new Categorie("Littératures", t4);
				 
				serviceTheme.add(t4,g13);
				serviceTheme.add(t4, g14);
                serviceTheme.add(t4,g15);
                serviceTheme.add(t4, g16);
	
                
				// theme graphisme et photo
				Categorie g17= new Categorie("Photo", t5);
				Categorie g18= new Categorie("Design", t5);
				Categorie g19= new Categorie("Vidéo,Cinéma et Son", t5);
				Categorie g20= new Categorie("Graphisme", t5);
				
				
				serviceTheme.add(t5,g17);
				serviceTheme.add(t5, g18);
				serviceTheme.add(t5,g19);
				serviceTheme.add(t5, g20);
	
		
				// ~~~~Sous catégories~~~~~
				//info
				  // Dev
				SousCategorie sc_gl = new SousCategorie("Modélisation et génie logiciel",g1);
				SousCategorie sc_lg = new SousCategorie("Langages",g1);
				SousCategorie sc_web = new SousCategorie("Conception et développement web",g1);
				SousCategorie sc_prog = new SousCategorie("Programmation",g1);						
				
				serviceTheme.add(g1, sc_gl);
				serviceTheme.add(g1, sc_lg);
				serviceTheme.add(g1,sc_web);
				serviceTheme.add(g1, sc_prog);				
				  // Hardware
				SousCategorie sc_arch = new SousCategorie("Architecture des ordinateurs",g2);
				SousCategorie sc_elec= new SousCategorie("Electronique pour l'informatique",g2);
				SousCategorie sc_logique = new SousCategorie("Logique programmable",g2);
				SousCategorie sc_periph = new SousCategorie("Périphériques",g2);
				
				serviceTheme.add(g2, sc_arch);
				serviceTheme.add(g2, sc_elec);
				serviceTheme.add(g2,sc_logique);
				serviceTheme.add(g2, sc_periph);	

				// BDD
				SousCategorie sc_modBd = new SousCategorie("Conception et modélisation",g3);
				SousCategorie sc_sql = new SousCategorie("SQL",g3);
				SousCategorie sc_BDobj = new SousCategorie("Bases de données objet et objet relationnelles",g3);
				SousCategorie sc_bigData = new SousCategorie("Big Data",g3);
				
				serviceTheme.add(g3, sc_modBd);
				serviceTheme.add(g3, sc_sql);
				serviceTheme.add(g3,sc_BDobj);
				serviceTheme.add(g3, sc_bigData);	
			
				// Sys exploitation
				SousCategorie sc_win = new SousCategorie("Windows",g4);
				SousCategorie sc_unix = new SousCategorie("UNIX",g4);
				SousCategorie sc_mac= new SousCategorie("Macintosh",g4);
				SousCategorie sc_str = new SousCategorie("OS embarqués et temps réel",g4);
				 
				
				serviceTheme.add(g4, sc_win);
				serviceTheme.add(g4, sc_unix);
				serviceTheme.add(g4,sc_mac);
				serviceTheme.add(g4, sc_str);	
				
				
				//Sciences
				  // S V
				SousCategorie sc_bio = new SousCategorie("Biologie",g5);
				SousCategorie sc_physio = new SousCategorie("Physiologie",g5);
				SousCategorie sc_gen = new SousCategorie("Génétique",g5);
				SousCategorie sc_eco = new SousCategorie("Ecologie",g5);
				
				
				
				serviceTheme.add(g5, sc_bio);
				serviceTheme.add(g5, sc_physio);
				serviceTheme.add(g5,sc_gen);
				serviceTheme.add(g5, sc_eco);	
				  // S T
				SousCategorie sc_geo = new SousCategorie("Géologie",g6);
				SousCategorie sc_env= new SousCategorie("Environnement",g6);
				SousCategorie sc_enSol = new SousCategorie("Energie solaire",g6);
				SousCategorie sc_atmo = new SousCategorie("Physique de l'atmosphère et climatologie",g6);
				
				
				
				serviceTheme.add(g6, sc_geo);
				serviceTheme.add(g6, sc_env);
			     serviceTheme.add(g6,sc_enSol);
			     serviceTheme.add(g6, sc_atmo);	

				//Physique
				SousCategorie sc_physFond = new SousCategorie("Physique fondamentale",g7);
				SousCategorie sc_physApp = new SousCategorie("Physique appliquée",g7);
				SousCategorie sc_meca = new SousCategorie("Mécanique",g7);
				SousCategorie sc_therm = new SousCategorie("Echanges thermiques",g7);
				
				serviceTheme.add(g7, sc_physFond);
				serviceTheme.add(g7, sc_physApp);
				serviceTheme.add(g7,sc_meca);
				serviceTheme.add(g7, sc_therm);	
			
				// chimie
				SousCategorie sc_ChimG = new SousCategorie("Chimie générale",g8);
				SousCategorie sc_BioCh = new SousCategorie("Biochimie",g8);
				SousCategorie sc_ChApp= new SousCategorie("Chimie appliquée",g8);
				SousCategorie sc_ChInd = new SousCategorie("Chimie industrielle",g8);

				
				serviceTheme.add(g8, sc_ChimG);
				serviceTheme.add(g8, sc_BioCh);
				serviceTheme.add(g8,sc_ChApp);
				serviceTheme.add(g8, sc_ChInd);	

			  // ~~~ Auteurs ~~~
	    			Auteur a1= new Auteur("Claude", "Aubry");
	    			Auteur a2= new Auteur("Jérôme", "Gabillaud");
	    			Auteur a3 = new Auteur("Rodolphe","Rimelé");
	    			Auteur a4 = new Auteur("Sandrine","Burriel");
	    			Auteur a5 = new Auteur("Mathieu","Lavant");
	    			Auteur a6 = new Auteur("Nicolas","Bonnet");
	    			Auteur a7 = new Auteur(" Jean-Noël ","Anderruthy");
	    			Auteur a8 = new Auteur("Luc"," Démaret");
	    			Auteur a9 = new Auteur("Philippe","Pierre");
 
	    			//############################## Livres ################
	    			Livre l1= new Livre("Scrum", 
	    					"Le guide pratique de la méthode agile la plus populaire",
	    					97821, "Francais",
	    					g1, t1,sc_gl, 352,ParseDate("2015-10-07"),66.00);
	    			l1.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/scrum.jpg"))));
	    			serviceLivre.add(l1);
	    			
	    	//		Livre l2 = new Livre("titre","soustitres",isbn,"langue",categorie,theme,nbpages,date,prix);

	    			Livre l2= new Livre("SQL Server 2014", 
	    					"Maîtrisez l'administration et la mise en oeuvre",
	    					46099, "Anglais",
	    					g3, t1,sc_sql, 1056,ParseDate("2015-10-14"),59.80);
	    			l2.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/sqlserver2014.jpg"))));
	    			serviceLivre.add(l2);
	    			
	    			Livre l3 = new Livre("Mémento HTML 5",
	    					 "HTML 5 - Une référence pour le développeur web",  978221,"Fr", 
	    					 g1,t1,sc_web,14 , ParseDate("05/05/2014"),10);
	    			l3.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/mementohtml5.jpg"))));
	    			serviceLivre.add(l3);		
	    			
	    			Livre l4 = new Livre("Apprendre Ajax / jQuery",
	    					"Ajoutez aisément de l'interaction à vos projets "
	    					+ "Web avec jQuery - Formation vidéo complète en 5h - DVD-Rom PC, Mac, Linux",
	    					1111184, "Fr", g1, t1, sc_web, 0, ParseDate("10/06/2010"), 49.90);	
	    			l4.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/ajaxjquerry.jpg"))));
	    			serviceLivre.add(l4);
	    			Livre l5 = new Livre("Wordpress starter kit",
	    	    					" ",
	    	    					97898, "Fr", g1, t1, sc_web, 100, ParseDate("24/05/2013"), 23.00);	
	    			l5.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/wordpresse.jpg"))));				
	    			serviceLivre.add(l5);			
	    	  Livre l6 = new Livre("À la découverte de Windows 10",
	    	    	    					" Spécial grands débutants",
	    	    	    					97822, "Fr", g4, t1, sc_win, 200, ParseDate("10/09/2015"), 14.90);	
	    	  l6.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/win10.jpg"))));
	    	  serviceLivre.add(l6);
	    	  
	    	  Livre l7 = new Livre("Le registre Windows 8",
  					" Architecture, administration, script, réparation, personnalisation, optimisation",
  					76518, "Fr", g4, t1, sc_win, 656, ParseDate("10/10/2012 "), 39.00);	
	    	  l7.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/win8.jpg"))));		
	    	  serviceLivre.add(l7);
  						
  					Livre l8 = new Livre("Unix - Administration du système",
  		  					" Architecture, administration, script, réparation, personnalisation, optimisation",
  		  				75122, "Fr", g4, t1, sc_unix, 430, ParseDate("16/08/2012"), 29.90);	
  					l8.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/unix.jpg"))));	
  					serviceLivre.add(l8);
  		  				Livre l9= new Livre("Debian GNU/Linux",
  	  		  					" Vers une administration de haute sécurité",
  	  		  				94413, "Fr", g4, t1, sc_unix,927, ParseDate("08/04/2015"), 54.00);	
  		  			l9.setPhoto(IOUtils.toByteArray(new FileInputStream(new File("photos/debian.jpg"))));
  		  		serviceLivre.add(l9);			
  	  		  			Publieur p1 = new Publieur("Ikram", "Abdelfattàh", "Tunis");
  	  		  		    Publieur p2 = new Publieur("Anwar", "Najm", "Sfax");
  	  		  	        Publieur p3 = new Publieur("Albert", "Rodger", "France");
  	  		            Publieur p4 = new Publieur("Farah", "Karìma", "Sousse");
  	  		            //publieurs
  	  		            serviceLivre.change(l1, p1);
	  	  		        serviceLivre.change(l2, p2);
	  	  		        serviceLivre.change(l3, p3);
	  	  		        serviceLivre.change(l4, p4);
	  	  		        serviceLivre.change(l5, p1);
	  	  		        serviceLivre.change(l6, p2);
	  	  		        serviceLivre.change(l7, p3);
	  	  		        serviceLivre.change(l8, p4);
	  	  		        serviceLivre.change(l9, p1);
	  	  		        
  	  		        serviceLivre.add(l1, a1);
  	  		        serviceLivre.add(l2, a2);
  	  		        serviceLivre.add(l3, a3);
  	  		        serviceLivre.add(l4, a3);	    			
  	  		        serviceLivre.add(l5, a4);
  	  		        serviceLivre.add(l6, a5);
  	  		        serviceLivre.add(l7, a6);	
  	  		        serviceLivre.add(l7, a7);
  	  		        serviceLivre.add(l8, a8);			    
  	  		        serviceLivre.add(l9, a9);
  	  		        
  	  		        
  	  
  		  					
	}

}
