package com.rjconsultores.ventaboletos.rest.service;

import java.util.List;

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

import com.rjconsultores.ventaboletos.dao.UsuarioDAO;
import com.rjconsultores.ventaboletos.entidad.Estacion;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.entidad.UsuarioEmpresa;
import com.rjconsultores.ventaboletos.entidad.UsuarioUbicacion;
import com.rjconsultores.ventaboletos.rest.bean.ParamsLogin;
import com.rjconsultores.ventaboletos.rest.returns.LoginRetorno;
import com.rjconsultores.ventaboletos.service.EstacionService;
import com.rjconsultores.ventaboletos.service.UsuarioEmpresaService;
import com.rjconsultores.ventaboletos.service.UsuarioUbicacionService;

@Service("loginService")
public class LoginService {
	@Autowired
	private UsuarioDAO usuarioDAO;

	@Autowired
	private UsuarioUbicacionService usuarioUbicacionService;

	@Autowired
	private UsuarioEmpresaService usuarioEmpresaService;

	@Autowired
	private EstacionService estacionService;

	@Transactional
	public LoginRetorno logar(ParamsLogin params) {
		LoginRetorno retorno = new LoginRetorno();
		retorno.setStatus("SUCCESS");

		if (params.getUsuario() == null || params.getUsuario().isEmpty() || 
				params.getSenha() == null || params.getSenha().isEmpty() ||
				params.getImei() == null || params.getImei().isEmpty()) {
			retorno.setStatus("ERROR");
			retorno.setMensagem("Parametros invalidos");
			
			return retorno;
		}
		
		Usuario usuario = usuarioDAO.buscarPeloNomeSenha(params.getUsuario(), params.getSenha());
		
		if (usuario == null) {
			retorno.setStatus("ERROR");
			retorno.setMensagem("Usuario/Senha invalido");
		} else {
			retorno.setUsuarioId(usuario.getUsuarioId());
			retorno.setNombusuario(usuario.getNombUsuarioCompleto());
			
			Estacion estacion = estacionService.buscarPorIMEI(params.getImei());
			
			if (estacion == null) {
				retorno.setStatus("ERROR");
				retorno.setMensagem("IMEI nao cadastrado");
				
				return retorno;
			}
			
			retorno.setEstacionId(estacion.getEstacionId());
			
			List<UsuarioUbicacion> lsUubicacion = usuarioUbicacionService.buscarPorUsuario(usuario);
			
			if (lsUubicacion != null && !lsUubicacion.isEmpty()) {
				for (UsuarioUbicacion ubicacion : lsUubicacion) {
					if (ubicacion.getPadrao()) {
						retorno.setPuntoventaId(ubicacion.getPuntoVenta().getPuntoventaId());
					}
				}
			}
			
			List<UsuarioEmpresa> empresas = usuarioEmpresaService.obtenerPorUsuario(usuario);
			
			if (empresas != null) {
				for (UsuarioEmpresa empresa : empresas) {
					retorno.getEmpresasId().add(empresa.getEmpresa().getEmpresaId());
				}
			}
		}
		
		return retorno;
	}
}
