package com.pe.droid.appquejas.service.impl;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.pe.droid.appquejas.domain.Cliente;
import com.pe.droid.appquejas.domain.Queja;
import com.pe.droid.appquejas.domain.Quejaestado;
import com.pe.droid.appquejas.domain.Trabajador;
import com.pe.droid.appquejas.domain.TrabajadorPK;
import com.pe.droid.appquejas.domain.Usuario;
import com.pe.droid.appquejas.repository.ClienteRepository;
import com.pe.droid.appquejas.repository.QuejaEstadoRepository;
import com.pe.droid.appquejas.repository.QuejaRepository;
import com.pe.droid.appquejas.repository.TrabajadorRepository;
import com.pe.droid.appquejas.repository.UsuarioRepository;
import com.pe.droid.appquejas.service.QuejaService;

@Service
public class QuejaServiceImpl implements QuejaService {

	@Autowired
	private QuejaRepository quejaRepository;

	@Autowired
	private UsuarioRepository usuarioRepository;

	@Autowired
	private QuejaEstadoRepository quejaEstadoRepository;

	@Autowired
	private ClienteRepository clienteRepository;

	@Autowired
	private TrabajadorRepository trabajadorRepository;

	@Override
	public List<Queja> listarQuejasPorUsuario(Integer idUsuario) {

		List<Queja> quejaList = new ArrayList<>();
		quejaList.addAll(quejaRepository.findByIdCliente(idUsuario));
		quejaList.addAll(quejaRepository.findByIdTrabajador(idUsuario));

		quejaList
				.forEach(q -> {

					Usuario u = usuarioRepository.findOne(q.getIdCliente()
							.longValue());
					Quejaestado qe = quejaEstadoRepository.findOne(q
							.getIdQuejaEstado().longValue());
					q.setNombreEstado(qe.getNombre());
					q.setNombreCliente(u.getApellidoPaterno() + " "
							+ u.getApellidoMaterno() + ", " + u.getNombre());

					if (q.getIdTrabajador() != null) {
						Usuario ut = usuarioRepository.findOne(q
								.getIdTrabajador().longValue());
						q.setNombreTrabajador(ut.getApellidoPaterno() + " "
								+ ut.getApellidoMaterno() + ", "
								+ ut.getNombre());
					}

				});

		return quejaList;
	}

	@Override
	public void actualizarQueja(Queja queja) throws Exception {

		if (queja == null) {
			throw new Exception("Debe ingresar el ID de queja");
		}

		if (queja.getIdQueja() == null) {
			throw new Exception("Debe ingresar el ID de queja");
		}

		Queja quejaCurrent = quejaRepository.findOne(queja.getIdQueja());

		if (quejaCurrent == null) {
			throw new Exception("La queja ingresada no existe");
		}

		quejaCurrent.setIdZona(queja.getIdZona());
		quejaCurrent.setIdQuejaGravedad(queja.getIdQuejaGravedad());
		quejaCurrent.setObservacionTrabajador(queja.getObservacionTrabajador());
		quejaCurrent.setLatitudVerificacion(queja.getLatitudVerificacion());
		quejaCurrent.setLongitudVerificacion(queja.getLongitudVerificacion());
		quejaCurrent.setFotoQuejaVerificacion(queja.getFotoQuejaVerificacion());
		quejaCurrent.setFechaVerificacion(new Date());
		quejaCurrent.setIdQuejaEstado(2);
		quejaRepository.save(quejaCurrent);
	}

	@Override
	public Usuario findByContrasenaAndUsuario(String contrasena, String usuario) {
		// TODO Auto-generated method stub
		
		Usuario usu = usuarioRepository.findByContrasenaAndUsuario(contrasena, usuario);
		
		if(usu!=null){
			usu.setContrasena("************");
			usu.setIsValidUser(true);
			Cliente cl = clienteRepository.findOne(usu.getIdUsuario());
			if(cl!=null){
				usu.setTipoUsuario("CLIENTE");
			}
//			else{
//				usu.setTipoUsuario("TRABAJADOR");
//			}
//			Trabajador tr = trabajadorRepository.findByIdTrabajador();
			Boolean exist = trabajadorRepository.exists(new TrabajadorPK(usu.getIdUsuario()));
			if (exist) {
				usu.setTipoUsuario("TRABAJADOR");
			}
		}
		
		if(usu==null){			
			usu = new Usuario();
			usu.setIsValidUser(false);
		}
		
		return usu;
	}
}

@@ -3625,18 +3625,16 @@
 %0D%0A%09%09%09%7D%0D%0A
-//
 %09%09%09else%7B
@@ -3635,18 +3635,16 @@
 %09else%7B%0D%0A
-//
 %09%09%09%09usu.
@@ -3674,18 +3674,16 @@
 DOR%22);%0D%0A
-//
 %09%09%09%7D%0D%0A//
@@ -3745,16 +3745,18 @@
 dor();%0D%0A
+//
 %09%09%09Boole
@@ -3830,24 +3830,26 @@
 uario()));%0D%0A
+//
 %09%09%09if (exist
@@ -3849,24 +3849,26 @@
  (exist) %7B%0D%0A
+//
 %09%09%09%09usu.setT
@@ -3890,24 +3890,26 @@
 BAJADOR%22);%0D%0A
+//
 %09%09%09%7D%0D%0A%09%09%7D%0D%0A%09

add login