package it.csi.demo.democomp.business.mgr;

import java.text.DateFormat;
import java.util.ArrayList;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.lang.String;

import it.csi.demo.democomp.dto.nspersona.Persona;
import it.csi.demo.democomp.dto.nspersona.Regione;
import it.csi.demo.democomp.dto.nspersona.Cittadino;
import it.csi.demo.democomp.business.business.dao.refappdao.dao.*;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.PersonaDto;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.RegioneDto;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.CittadinoDto;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.CittadinoPk;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.ComuneDto;
import it.csi.demo.democomp.business.business.dao.refappdao.dto.ComunePk;
import it.csi.demo.democomp.business.business.dao.refappdao.exceptions.CittadinoDaoException;
import it.csi.demo.democomp.business.business.dao.refappdao.exceptions.PersonaDaoException;
import it.csi.demo.democomp.business.business.dao.refappdao.exceptions.RegioneDaoException;
import it.csi.demo.democomp.business.business.dao.refappdao.exceptions.ComuneDaoException;

import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;

import org.springframework.transaction.annotation.Transactional;


public class GestorePersona {
	
	@Transactional
    public boolean salvaNuovoCittadino(Cittadino cit){
		boolean ris = false;
		CittadinoPk x = new CittadinoPk();
		CittadinoDto c = new CittadinoDto();
		SimpleDateFormat dFine = new SimpleDateFormat("yyyy-mm-dd");
		SimpleDateFormat dOrigine = new SimpleDateFormat("dd/mm/yyyy");
		
		
		c.setCognome(cit.getCognome());
		c.setNome(cit.getNome());
		c.setSesso(cit.getSesso());
		try
		   {
		      Date d = dOrigine.parse(cit.getDataNascita());    
		      c.setDataNascita(java.sql.Date.valueOf(dFine.format(d)));
		   } catch (ParseException e)
		   {
		     e.printStackTrace();
		   }
		   
		c.setIdComuneNascita(new BigDecimal(cit.getIdComuneNascita()));
		c.setIdComuneResid(new BigDecimal(cit.getIdComuneResid()));
		c.setRetribuzione(new BigDecimal(cit.getRetribuzione()));
		
		try{
			x = getCittadinoDao().insert(c);		
		}catch (RuntimeException e){
			e.printStackTrace();
		}
		
		return ris;
	}
	
	@Transactional
	public boolean cancellaCittadino(int idCittadino){
		boolean ris = false;
		CittadinoPk c = new CittadinoPk();
		c.setIdCittadino(new BigDecimal(idCittadino));
		try{
			getCittadinoDao().delete(c);		
		}catch (CittadinoDaoException e){
			e.printStackTrace();
		}
		
		return ris;
	}

	@Transactional
	public boolean modificaCittadino(Cittadino cit){
		boolean ris = false;
		SimpleDateFormat dFine = new SimpleDateFormat("yyyy-mm-dd");
		SimpleDateFormat dOrigine = new SimpleDateFormat("dd/mm/yyyy");
		
		CittadinoDto c = new CittadinoDto();
		c.setIdCittadino(new BigDecimal(cit.getIdCittadino()));
		c.setCognome(cit.getCognome());
		c.setNome(cit.getNome());
		c.setSesso(cit.getSesso());
		try
		   {
		      Date d = dOrigine.parse(cit.getDataNascita());    
		      c.setDataNascita(java.sql.Date.valueOf(dFine.format(d)));
		   } catch (ParseException e)
		   {
		     e.printStackTrace();
		   }
		c.setIdComuneNascita(new BigDecimal(cit.getIdComuneNascita()));
		c.setIdComuneResid(new BigDecimal(cit.getIdComuneResid()));
		c.setRetribuzione(new BigDecimal(cit.getRetribuzione()));
		
		try{
		    getCittadinoDao().update(c);		
		}catch (CittadinoDaoException e){
			e.printStackTrace();
		}
		
		return ris;
	}
	
	public Cittadino getCittadinoByPk(int idCittadino){
		Cittadino ris = new Cittadino();
		CittadinoPk c = new CittadinoPk();
		CittadinoDto cit = new CittadinoDto();
		c.setIdCittadino(new BigDecimal(idCittadino));
		try{
		    cit = getCittadinoDao().findByPrimaryKey(c);		
		}catch (CittadinoDaoException e){
			e.printStackTrace();
		}
		
		ris.setIdCittadino(cit.getIdCittadino().intValue());
		ris.setCognome(cit.getCognome());
		ris.setNome(cit.getNome());
		ris.setSesso(cit.getSesso());
		ris.setDataNascita(cit.getDataNascita().toString());
		ris.setIdComuneNascita(cit.getIdComuneNascita().intValue());
		ris.setIdComuneResid(cit.getIdComuneResid().intValue());
		ris.setRetribuzione(cit.getRetribuzione().longValue());
			
		return ris;
	}
	
	public ArrayList<Persona> getElencoPersone(Persona p){
		ArrayList<Persona> ris = new ArrayList<Persona>();
		
		try {
			List<CittadinoDto> elenco = getCittadinoDao().findFindByLoc(p);
			for (CittadinoDto personaDto : elenco) {
				Persona x = new Persona();
				ComunePk y = new ComunePk();
				y.setIdComune(personaDto.getIdComuneResid());
				ComuneDto comuneDto = new ComuneDto();
				try {
					comuneDto = getComuneDao().findByPrimaryKey(y);
				}catch (ComuneDaoException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				x.setIdCittadino(personaDto.getIdCittadino().intValue());
				x.setNome(personaDto.getNome());
				x.setCognome(personaDto.getCognome());
				x.setSesso(personaDto.getSesso());
			    x.setRetribuzione(personaDto.getRetribuzione().longValue());
				x.setResidenza(comuneDto.getDescrizione());
			    
			    ris.add(x);
			}
		} catch (CittadinoDaoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return ris;
		
		
	}
	
	CittadinoDao cittadinoDao = null;
	public CittadinoDao getCittadinoDao() {
		return cittadinoDao;
	}

	public void setCittadinoDao(CittadinoDao cittadinoDao) {
		this.cittadinoDao = cittadinoDao;
	}
	ComuneDao comuneDao = null;
	public ComuneDao getComuneDao() {
		return comuneDao;
	}

	public void setComuneDao(ComuneDao comuneDao) {
		this.comuneDao = comuneDao;
	}

}




