package com.rjconsultores.tests;

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

import org.junit.After;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.rjconsultores.ventaboletos.dao.CtrlSerieEmbarcadaDAO;
import com.rjconsultores.ventaboletos.dao.DispositivoEmbarcadaDAO;
import com.rjconsultores.ventaboletos.entidad.CtrlSerieEmbarcada;
import com.rjconsultores.ventaboletos.entidad.DispositivoEmbarcada;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.service.ControleSerieEmbarcadaService;
import com.rjconsultores.ventaboletos.vo.embarcada.SerieEmbarcada;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/spring-test.xml"})
public class SerieEmbarcadaTest {
	private static final Logger log = LoggerFactory.getLogger(SerieEmbarcadaTest.class);
			
	@Autowired
	private DispositivoEmbarcadaDAO dispositivoEmbarcadaDAO;

	@Autowired
	private CtrlSerieEmbarcadaDAO ctrlSerieEmbarcadaDAO;
		
	@Autowired
	private ControleSerieEmbarcadaService controleSerieEmbarcadaService;
	
	@Before
	public void initApplicationContext() {

	}

	@After
	public void closeApplicationContext() {

	}

	@Test
	public void test() {
		log.info("***");
		
		Empresa empresa = new Empresa();
		PuntoVenta puntoventa = new PuntoVenta();
		Estado estado = new Estado();
		
		empresa.setEmpresaId(10);
//		puntoventa.setPuntoventaId(1);
		puntoventa.setPuntoventaId(5304);
		
		estado.setEstadoId(1);
		estado.setCveestado("XX");
		
		DispositivoEmbarcada de = null;

		List<DispositivoEmbarcada> dispositivos = dispositivoEmbarcadaDAO.buscarPorEmpresaPuntoVenta(empresa, puntoventa);
		
		log.info("Dispositivos");
		
		for (DispositivoEmbarcada dispositivo : dispositivos) {
			if (de == null) {
				de = dispositivo;
			}
			
			log.info("+ " + dispositivo.getDispositivoEmbarcadaId() + " - " + dispositivo.getDescricao() + " (" + dispositivo.getMac() + "/" + dispositivo.getImei() + ")");
		}
		
		log.info("Dispositivo Selecionado");
		log.info("= " + de.getDispositivoEmbarcadaId() + " - " + de.getDescricao() + " (" + de.getMac() + "/" + de.getImei() + ")");
		
		if (ctrlSerieEmbarcadaDAO.validaDispositivoEmpresaEstadoCadastrado(de, empresa, estado)) {
			log.info("- Dispositivo ja cadastrado para esta empresa/estado");
		} else {
			CtrlSerieEmbarcada se = null;
			
			se = new CtrlSerieEmbarcada();
			se.setDispositivoEmbarcada(de);
			se.setEmpresa(empresa);
			se.setEstado(estado);
			se.setIndBaixado(Boolean.FALSE);
			se.setIndReutilizado(Boolean.FALSE);
			se.setActivo(Boolean.TRUE);
			se.setFecmodif(new Date());
			se.setUsuarioId(1);
			
			se = ctrlSerieEmbarcadaDAO.suscribir(se);
			
			SerieEmbarcada seq = controleSerieEmbarcadaService.buscarSerieEmbarcada(se);
			
			se.setSerie(seq.getSerie());
			se.setNumeroInicial(seq.getNumero());
			se.setNumeroCorrente(seq.getNumero());
			se.setCtrlSerieEmbarcadaSeq(seq.getCtrlSerieEmbarcada());
			
			se = ctrlSerieEmbarcadaDAO.actualizacion(se);
			
			log.info("Serie Cadastrada");
			log.info("= " + se.getCtrlSerieEmbarcadaId() + " (" + se.getSerie() + "/" + se.getNumeroInicial() + ")");
		}
		
		log.info("***");
	}

}
