using AutoMapper;
using ConvertToDTE.Model;
using ConvertToDTE.Model.Dtos.Response;
using ConverterDTE.Model.Dtos.Response;
using System.Xml.Serialization;
using System.IO;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// Registrar AutoMapper con el perfil de mapeo
builder.Services.AddAutoMapper(typeof(Program));

// Agrega soporte para XML
builder.Services.AddControllers()
    .AddXmlSerializerFormatters();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

// Ruta POST para recibir el objeto SourceDTE, mapearlo y retornarlo como XML
app.MapPost("/Dte", (SourceDTE request, IMapper mapper) =>
{
    
    // Mapea el SourceDTE a la entidad DTE_MediPiel.DTE
    var dte = mapper.Map<DTE_MediPiel>(request);

    // Serializa el objeto DTE a XML
    var xmlContent = SerializeToXml(dte);

    // Retorna el XML como respuesta
    return Results.Text(xmlContent, "application/xml");
})
.WithName("Post DTE")
.WithOpenApi();

app.Run();

static string SerializeToXml(DTE_MediPiel dto)
{
    // Cambiar la serialización para trabajar con DTE dentro de DTE_MediPiel
    XmlSerializer serializer = new XmlSerializer(typeof(DTE_MediPiel));
    XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
    namespaces.Add("", ""); // Eliminar los prefijos de los namespaces
    using (StringWriter writer = new StringWriter())
    {
        serializer.Serialize(writer, dto, namespaces);
        return writer.ToString();
    }
}
