package com.proit.debitors.dao;

import com.proit.debitors.model.Debitor;
import com.proit.debitors.model.User;
import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

import java.util.List;


@Repository("debitorDao")
public class DebitorDaoImpl extends AbstractDao<Integer, Debitor> implements DebitorDao {

	static final Logger logger = LoggerFactory.getLogger(DebitorDaoImpl.class);
	
	public Debitor findById(int id) {
		Debitor debitor = getByKey(id);
/*
		if(debitor!=null){
			Hibernate.initialize(debitor.get());
		}
*/
		return debitor;
	}

	public List<Debitor> findByIDNO(String idno) {
		logger.info("IDNO : {}", idno);
		Criteria crit = createEntityCriteria();
		crit.add(Restrictions.eq("idno", idno));
		List<Debitor> debitors = crit.list();
		return debitors;
	}

/*
	@SuppressWarnings("unchecked")
	public List<Debitor> findAllDebitorsByUser(User user) {
		Criteria criteria = createEntityCriteria().addOrder(Order.asc("firstName"));
		criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);//To avoid duplicates.
		List<User> users = (List<User>) criteria.list();
		
		// No need to fetch userProfiles since we are not showing them on list page. Let them lazy load. 
		// Uncomment below lines for eagerly fetching of userProfiles if you want.
		*/
/*
		for(User user : users){
			Hibernate.initialize(user.getUserProfiles());
		}*//*

		return users;
	}
*/

	public void save(Debitor debitor) {
		persist(debitor);
	}

	public void deleteById(int id) {
		Debitor debitor = findById(id);
		delete(debitor);
	}

}
