package jpa;


import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityTransaction;
import metier.*;

import java.util.ArrayList;
import java.util.List;

public class JpaTest {


	private EntityManager manager;

	public JpaTest(EntityManager manager) {
		this.manager = manager;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		EntityManager manager = EntityManagerHelper.getEntityManager();

		JpaTest test = new JpaTest(manager);

		EntityTransaction tx = manager.getTransaction();
		tx.begin();
		try {
            //test.create_user_test();
			//test.list_utilisateur();
			test.create_session_test();
			test.list_session();
		} catch (Exception e) {
			e.printStackTrace();
		}
		tx.commit();

			
   	 manager.close();
		EntityManagerHelper.closeEntityManagerFactory();
		System.out.println(".. done");
	}

    private void create_user_test() {
        int numUser = manager.createQuery("SELECT u FROM Utilisateur u", Utilisateur.class).getResultList().size();
        if (numUser == 0) {
            //Utilisateur
            Utilisateur utilisateur1 = new Utilisateur();
            utilisateur1.setName("Tibo");

            Utilisateur utilisateur2 = new Utilisateur();
            utilisateur2.setName("Rochas");
            

            manager.persist(utilisateur1);
            manager.persist(utilisateur2);
		}

    }

	private void create_session_test() {
        int numSession = manager.createQuery("SELECT s FROM Session s", Session.class).getResultList().size();
        if (numSession == 0) {

			Session session1 = new Session();
			//session1.setCodePIN(1703);
			session1.setTheme("Inphormatik");
			session1.setQuizzs(new ArrayList<>());

			//List<Utilisateur> ulist = manager.createQuery("select user from Utilisateur user").getResultList();
			//session1.setUtilisateurs(ulist);

			session1.setUtilisateurs(new ArrayList<>());

			Utilisateur utilisateur1 = new Utilisateur();
            utilisateur1.setName("Tibo");
			utilisateur1.setSessions(new ArrayList<>());


            Utilisateur utilisateur2 = new Utilisateur();
            utilisateur2.setName("Rochas");
			utilisateur2.setSessions(new ArrayList<>());

			session1.addUser(utilisateur1);
			session1.addUser(utilisateur2);

			Quizz quizz1 = new Quizz();
			session1.addQuizz(quizz1);

			manager.persist(session1);

        }
    }


    private void list_utilisateur(){
        List<Utilisateur> result_utilisatuer_list= manager.createQuery("select u from Utilisateur u", Utilisateur.class).getResultList();
        for (Utilisateur u : result_utilisatuer_list) {
            System.out.println(u.getId() + " " + u.getName() +" "+ u.getEmail());
        }
    }

	private void list_session(){
        List<Session> result_session_list= manager.createQuery("select s from Session s", Session.class).getResultList();
        for (Session s : result_session_list) {
            System.out.println("\n" +s.getCodePIN() + " " + s.getTheme());
			System.out.println("User :" + s.getUtilisateurs().size());
			for(Utilisateur u : s.getUtilisateurs()){
				System.out.println("\t"+u.getId() + " " + u.getName() +" "+ u.getEmail());
			}
			System.out.println("Quizzs :" + s.getQuizzs().size());
			for(Quizz q : s.getQuizzs()){
				System.out.println("\t"+q.getId());
			}
        }
    }
	

}
