package utils

import (
	"daemonService/internal/models/sincronizacionDatos/response"
	"daemonService/internal/soap"
	"fmt"
)

func ProcesarRespuestaSincronizacion(tagName string, bodyBytes []byte) (interface{}, error) {
	var err error
	var respSincronizacion interface{}

	switch tagName {
	case "sincronizarActividades":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.ListaActividades, response.SoapEnvelopeActividad](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta ListaActividades: %v", err)
		}

	case "sincronizarFechaHora":
		respSincronizacion, err = soap.ParsearRespuestaSOAPfechaHora[response.RespuestaFechaHora, response.SoapEnvelopeFechaHora](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta FechaHora: %v", err)
		}

	case "sincronizarListaMensajesServicios":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.MensajeServicio, response.SoapEnvelopeMensajeServicio](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta MensajeServicio: %v", err)
		}

	case "sincronizarListaLeyendasFactura":
		respSincronizacion, err = soap.ParsearRespuestaSOAPIdentificador[[]response.LeyendaDetalle, response.SoapEnvelopeLeyendas](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta LeyendaDetalle: %v", err)
		}

	case "sincronizarListaProductosServicios":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.ProductoServicio, response.SoapEnvelopeProductoServicio](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta ProductoServicio: %v", err)
		}

	case "sincronizarParametricaMotivoAnulacion":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.MotivoAnulacion, response.SoapEnvelopeMotivoAnulacion](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta MotivoAnulacion: %v", err)
		}
	case "sincronizarParametricaTipoDocumentoIdentidad":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.TipoDocumento, response.SoapEnvelopeTipoDocumento](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta TipoDocumento: %v", err)
		}

	case "sincronizarParametricaTipoDocumentoSector":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.TipoSector, response.SoapEnvelopeTipoSector](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta TipoSector: %v", err)
		}

	case "sincronizarListaActividadesDocumentoSector":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.TipoActividadesSector, response.SoapEnvelopeTipoActividadesSector](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta TipoSctividadSector: %v", err)
		}

	case "sincronizarParametricaTipoEmision":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.TipoEmision, response.SoapEnvelopeTipoEmision](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta TipoEmision: %v", err)
		}

	case "sincronizarParametricaTiposFactura":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.TipoFactura, response.SoapEnvelopeTipoFactura](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta TiposFactura: %v", err)
		}

	case "sincronizarParametricaTipoMoneda":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.Moneda, response.SoapEnvelopeMoneda](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta Moneda: %v", err)
		}

	case "sincronizarParametricaTipoMetodoPago":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.MetodoPago, response.SoapEnvelopeMetodoPago](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta MetodoPago: %v", err)
		}

	case "sincronizarParametricaTipoPuntoVenta":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.PuntoVenta, response.SoapEnvelopePuntoVenta](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta PuntoVenta: %v", err)
		}

	case "sincronizarParametricaUnidadMedida":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.UnidadMedida, response.SoapEnvelopeUnidadMedida](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta UnidadMedida: %v", err)
		}

	case "sincronizarParametricaEventosSignificativos":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.EventoSignificativo, response.SoapEnvelopeEventoSignificativo](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta EventosSignificativos: %v", err)
		}

	case "sincronizarParametricaTipoHabitacion":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.TipoHabitacion, response.SoapEnvelopeTipoHabitacion](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta TipoHabitacion: %v", err)
		}

	case "sincronizarParametricaPaisOrigen":
		respSincronizacion, err = soap.ParsearRespuestaSOAP[[]response.PaisOrigen, response.SoapEnvelopePaisOrigen](bodyBytes)
		if err != nil {
			return nil, fmt.Errorf("error parseando respuesta PaisOrigen: %v", err)
		}
	default:
		return nil, fmt.Errorf("tag no reconocido: %s", tagName)
	}

	return respSincronizacion, nil
}
