package com.proit.debitors.service;

import com.proit.debitors.dao.DebitorDao;
import com.proit.debitors.dao.UserDao;
import com.proit.debitors.model.Debitor;
import com.proit.debitors.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Set;


@Service("debitorService")
@Transactional
public class DebitorServiceImpl implements DebitorService{

	@Autowired
	private UserDao userDao;

	@Autowired
	private DebitorDao dao;

	public Debitor findById(int id) {
		return dao.findById(id);
	}

	public List<Debitor> findByIDNO(String idno) {
		List<Debitor> debitors = dao.findByIDNO(idno);
		return debitors;
	}

	public void saveDebitor(Debitor debitor) {
		dao.save(debitor);
	}

	/*
	 * Since the method is running with Transaction, No need to call hibernate update explicitly.
	 * Just fetch the entity from db and update it with proper values within transaction.
	 * It will be updated in db once transaction ends. 
	 */
	public void updateDebitor(Debitor debitor) {
		Debitor entity = dao.findById(debitor.getId());
		if(entity!=null){
			entity.setIdno(debitor.getIdno());
			entity.setDirectorName(debitor.getDirectorName());
			entity.setEmail(debitor.getEmail());
			entity.setTelefon(debitor.getTelefon());
			entity.setDataDatorie(debitor.getDataDatorie());
			entity.setSumaDatorie(debitor.getSumaDatorie());

		}
	}


	public List<Debitor> findAllDebitorsByUser(User user) {
		return user.getUserDebitors();
	}

	public void deleteDebitor(int id) {
		dao.deleteById(id);
	}
}
