package response

import (
	"encoding/xml"
	"fmt"
)

// Estructuras para respuesta SOAP
type SoapEnvelopeLeyendas struct {
	XMLName xml.Name         `xml:"Envelope"`
	Body    SoapBodyLeyendas `xml:"Body"`
}

type SoapBodyLeyendas struct {
	Response SincronizarLeyendasResponse `xml:"sincronizarListaLeyendasFacturaResponse"`
}

type SincronizarLeyendasResponse struct {
	Respuesta RespuestaListaLeyendas `xml:"RespuestaListaParametricasLeyendas"`
}

type RespuestaListaLeyendas struct {
	Transaccion   bool             `xml:"transaccion" json:"transaccion"`
	ListaLeyendas []LeyendaDetalle `xml:"listaLeyendas" json:"listaLeyendas"`
}

// CUSTOMER RESPONSE: parte del Body se envia al CustomerResponseModel.go
type LeyendaDetalle struct {
	CodigoProducto     string `xml:"codigoProducto,omitempty" json:"codigo,omitempty"`
	CodigoActividad    string `xml:"codigoActividad" json:"codigoActividad"`
	DescripcionLeyenda string `xml:"descripcionLeyenda" json:"descripcion"`
}

// Implementaciones para cada tipo de envelope
func (e SoapEnvelopeLeyendas) IsTransactionSuccessful() bool {
	return e.Body.Response.Respuesta.Transaccion
}

func (e SoapEnvelopeLeyendas) GetData() []LeyendaDetalle {
	return e.Body.Response.Respuesta.ListaLeyendas
}

// Método modificado para usar SoapEnvelopeLeyendas como receptor
func (r SoapEnvelopeLeyendas) AsignarCodigosSecuenciales() {
	for i := range r.Body.Response.Respuesta.ListaLeyendas {
		// Asignar un código secuencial comenzando desde 1
		//r.Body.Response.Respuesta.ListaLeyendas[i].CodigoProducto = fmt.Sprintf("PROD%04d", i+1)
		r.Body.Response.Respuesta.ListaLeyendas[i].CodigoProducto = fmt.Sprintf("%d", i+1)
	}
}
