package com.ejie.ad74a.ws.client.prestadorWS.operaciones;

import java.math.BigDecimal;
import java.util.List;

import javax.xml.datatype.DatatypeConfigurationException;

import com.ejie.ad74a.model.Contactos;
import com.ejie.ad74a.model.DocumentosInfSocial;
import com.ejie.ad74a.model.DocumentosInforme;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.Informes;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.comun.UtilidadesFecha;
import com.ejie.ad74a.ws.client.prestadorWS.data.ContactoType;
import com.ejie.ad74a.ws.client.prestadorWS.data.DatosAltaType;
import com.ejie.ad74a.ws.client.prestadorWS.data.DatosBeneficiario;
import com.ejie.ad74a.ws.client.prestadorWS.data.DatosContacto;
import com.ejie.ad74a.ws.client.prestadorWS.data.InformeMedicoType;
import com.ejie.ad74a.ws.client.prestadorWS.service.ParseUtils;

import antlr.StringUtils;

public class OpAltaPersonaBeneficiaria extends OpComunes {

	public static DatosAltaType getDatosAltaType(Solicitantes solicitante, Expedientes expediente,
			List<Contactos> listaContactos, DocumentosInfSocial informeSocial, String rutaPIFInformeMedico)
			throws DatatypeConfigurationException {
		DatosAltaType datosAltaType = new DatosAltaType();

// datosBeneficiario
		DatosBeneficiario datosBeneficiario = new DatosBeneficiario();
		// fAltaBeneficiario
		datosBeneficiario
				.setFAltaBeneficiario(UtilidadesFecha.parseDate2XMLGregorianCalendar(solicitante.getfAlta01()));
		// fNacimiento
		datosBeneficiario
				.setFNacimiento(UtilidadesFecha.parseDate2XMLGregorianCalendar(solicitante.getfNacimiento01()));
		// sexo
		datosBeneficiario.setSexo(solicitante.getSexo01());
		// idiomaPrestServicio
//		if (solicitante.getIdiomaSolicitante01() != null) {
//			datosBeneficiario.setIdiomaPrestServicio(new BigDecimal(solicitante.getIdiomaSolicitante01()));
//		}
		if (solicitante.getIdiomaServicio01() != null) {
			datosBeneficiario.setIdiomaPrestServicio(new BigDecimal(solicitante.getIdiomaServicio01()));
		}
		// gradoDependencia
		datosBeneficiario.setGradoDependencia(solicitante.getDependencia() == null ? null
				: ParseUtils.parseInt2GradoDependenciaEnum(
						solicitante.getDependencia().getIdGradoDependencia04().intValue()));
		// tis
		datosBeneficiario.setTis(solicitante.getNumtis01());
		// nss
		datosBeneficiario.setNss(solicitante.getNumss01());
		// urgente
		datosBeneficiario.setUrgente(ParseUtils.parseInt2BinarioEnum(expediente.getIsurgencia()));
		// nombre
		datosBeneficiario.setNombre(solicitante.getNombre01());
		// ape1
		datosBeneficiario.setApe1(solicitante.getApellido101());
		// ape2
		datosBeneficiario.setApe2(solicitante.getApellido201());

		datosAltaType.setDatosBeneficiario(datosBeneficiario);
// datosContacto
		DatosContacto datosContacto = new DatosContacto();
		// telefonoServicio
		datosContacto.setTelefonoServicio(solicitante.getTlfnoServicio01());
		// movil
		datosContacto.setMovil(solicitante.getTlfnoMovil01());
		// email
		datosContacto.setEmail(solicitante.getEmail01());
		// direccion
		datosContacto.setDireccion(ParseUtils.direcciones2DireccionType(solicitante.getDirecciones()));
		// pisoTutelado
		datosContacto.setPisoTutelado(ParseUtils.parseInt2BinarioEnum(solicitante.getPerfiles().getPisoTutelado07()));

		datosAltaType.setDatosContacto(datosContacto);
// contactosList
		List<ContactoType> contactosList = datosAltaType.getContactosList();
		for (Contactos contactoAd74a : listaContactos) {
			ContactoType contactoType = new ContactoType();
			// numDocumento
			contactoType.setNumDocumento(contactoAd74a.getIdentificador03());
			// nombre
			contactoType.setNombre(contactoAd74a.getNombre03());
			// ape1
			contactoType.setApe1(contactoAd74a.getApellido103());
			// ape2
			contactoType.setApe2(contactoAd74a.getApellido203());
			// poseeLlaves
			contactoType.setPoseeLlaves(ParseUtils.parseInt2BinarioEnum(contactoAd74a.getPoseeLlaves03()));
			// tlf1
			contactoType.setTlf1(contactoAd74a.getTlfno03());
			// tlf2
			contactoType.setTlf2(contactoAd74a.getTlfno203());
			// tlf3
			contactoType.setTlf3(contactoAd74a.getTlfno303());
			// esContactoInstalacion
			contactoType.setEsContactoInstalacion(ParseUtils.parseInt2BinarioEnum(contactoAd74a.getContactoInst03()));
			contactosList.add(contactoType);
		}
// informeSocial
		datosAltaType.setInformeSocial(rellenarDatosInformeSocialType(informeSocial));
// informeMedico
		InformeMedicoType informeMedico = new InformeMedicoType();
		informeMedico.setRutaFichero(rutaPIFInformeMedico);
		datosAltaType.setInformeMedico(informeMedico);

		return datosAltaType;
	}

}
