package sincronizacionDatos

import (
	"daemonService/internal/models"
	sd "daemonService/internal/models/sincronizacionDatos/request"
	"encoding/xml"
	"fmt"
)

func GenerarSOAPRequest(s *models.ServiceModel, solicitud sd.SolicitudSincronizacion) (string, error) {
	// Validar datos de entrada
	//if err := validarSolicitud(solicitud); err != nil {
	// return "", err
	//}

	envelope := sd.SOAPRequestEnvelope{
		XmlnsSoapenv: "http://schemas.xmlsoap.org/soap/envelope/",
		XmlnsSiat:    "https://siat.impuestos.gob.bo/",
		Header:       &sd.SOAPRequestHeader{},
		Body: sd.SOAPRequestBody{
			Operacion: sd.OperacionXML{
				XMLName: xml.Name{Local: "siat:" + s.TagNames},
				Solicitud: sd.SolicitudSincronizacion{
					CodigoAmbiente:   solicitud.CodigoAmbiente,
					CodigoPuntoVenta: solicitud.CodigoPuntoVenta,
					CodigoSistema:    solicitud.CodigoSistema,
					CodigoSucursal:   solicitud.CodigoSucursal,
					Cuis:             solicitud.Cuis,
					Nit:              solicitud.Nit,
				},
			},
		},
	}

	// Se genera el XML con indentación para mayor legibilidad
	xmlBytes, err := xml.MarshalIndent(envelope, "", "   ")
	if err != nil {
		return "", fmt.Errorf("error al generar XML: %w", err)
	}

	// Se concatena la cabecera XML
	soapRequest := xml.Header + string(xmlBytes)

	return soapRequest, nil
}

// validarSolicitud verifica que los campos requeridos estén presentes en la solicitud
//func validarSolicitud(solicitud sd.SolicitudSincronizacionLeyendas) error {
//	if solicitud.CodigoSistema == "" {
//		return fmt.Errorf("código de sistema no puede estar vacío")
//	}
//	if solicitud.Nit == "0" {
//		return fmt.Errorf("NIT no puede ser cero")
//	}
//	if solicitud.Cuis == "" {
//		return fmt.Errorf("CUIS no puede estar vacío")
//	}
//	if solicitud.CodigoAmbiente == "0" {
//		return fmt.Errorf("código de ambiente no puede ser cero")
//	}
//	return nil
//}
