package org.packt.online.cart.portal.dao.impl;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.packt.online.cart.portal.dao.CustomerAccountDao;
import org.packt.online.cart.portal.model.data.CustomerAccount;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
public class CustomerAccountDaoImpl implements CustomerAccountDao {
	
	private SessionFactory sessionFactory;
	

	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	@Transactional
	@Override
	public void setCustomerProfile(CustomerAccount account) {
		Session session = this.sessionFactory.openSession();
		Transaction transaction = session.beginTransaction();

		session.persist(account);
		transaction.commit();
		session.close();


	}

	@Transactional
	@SuppressWarnings("unchecked")
	@Override
	public CustomerAccount getCustomerProfile(String username) {
		Session session = this.sessionFactory.getCurrentSession();
		Criteria crit = session.createCriteria(CustomerAccount.class);
		crit.add(Restrictions.like("username",username));
		List<CustomerAccount> login = crit.list();
		return login.get(0);

	}

	
	@Transactional

   
	@Override
	public List<CustomerAccount> getAllCustomers() {
		Session session = this.sessionFactory.getCurrentSession();
		List<CustomerAccount> customers = session.createQuery("from CustomerAccount").list();
		
		return customers;
	}

}