using System;
using System.Xml.Serialization;

namespace ConvertToDTE.Model.Dtos.Response
{
    [XmlRoot("DTE")]
    public class DTE
    {
        [XmlAttribute("version")]
        public string Version { get; set; }

        [XmlElement("Documento")]
        public Documento Documento { get; set; }
    }

    public class Documento
    {
        [XmlAttribute("ID")]
        public string ID { get; set; }

        [XmlElement("Encabezado")]
        public Encabezado Encabezado { get; set; }

        [XmlElement("Detalle")]
        public Detalle Detalle { get; set; }

        [XmlElement("CAE")]
        public CAE CAE { get; set; }
    }

    public class Encabezado
    {
        [XmlElement("IdDoc")]
        public IdDoc IdDoc { get; set; }

        [XmlElement("Emisor")]
        public Emisor Emisor { get; set; }

        [XmlElement("Receptor")]
        public Receptor Receptor { get; set; }

        [XmlElement("Totales")]
        public Totales Totales { get; set; }

        [XmlElement("Impuestos")]
        public Impuestos Impuestos { get; set; }

        [XmlElement("Retenciones")]
        public Retencion[] Retenciones { get; set; }
    }

    public class IdDoc
    {
        public string Ambiente { get; set; }
        public string TipoServicio { get; set; }
        public string Tipo { get; set; }
        public string Serie { get; set; }
        public string Numero { get; set; }
        public string NumeroInterno { get; set; }
        public string FechaEmis { get; set; }
        public string MedioPago { get; set; }
        public string FechaVenc { get; set; }
        public string TipoNegociacion { get; set; }
        public string Plazo { get; set; }
    }

    public class Emisor
    {
        public string TipoContribuyente { get; set; }
        public string RegimenContable { get; set; }
        public string IDEmisor { get; set; }
        public string NmbEmisor { get; set; }
        public NombreEmisor NombreEmisor { get; set; }
        public CodigoEmisor CodigoEmisor { get; set; }
        public Direccion DomFiscal { get; set; }
        public Direccion LugarExped { get; set; }
        public ContactoEmisor ContactoEmisor { get; set; }
    }

    public class NombreEmisor
    {
        public string PrimerNombre { get; set; }
    }

    public class CodigoEmisor
    {
        public string TpoCdgIntEmisor { get; set; }
        public string CdgIntEmisor { get; set; }
    }

    public class Direccion
    {
        public string Calle { get; set; }
        public string Departamento { get; set; }
        public string Ciudad { get; set; }
        public string Pais { get; set; }
        public string CodigoPostal { get; set; }
    }

    public class ContactoEmisor
    {
        public string Nombre { get; set; }
        public string eMail { get; set; }
    }

    public class Receptor
    {
        public string RegimenContableR { get; set; }
        public string TipoContribuyenteR { get; set; }
        public DocRecep DocRecep { get; set; }
        public string NmbRecep { get; set; }
        public NombreRecep NombreRecep { get; set; }
        public CodigoReceptor CodigoReceptor { get; set; }
        public string CdgSucursal { get; set; }
        public Direccion DomFiscalRcp { get; set; }
        public Direccion LugarRecep { get; set; }
        public ContactoReceptor ContactoReceptor { get; set; }
    }

    public class DocRecep
    {
        public string TipoDocRecep { get; set; }
        public string NroDocRecep { get; set; }
    }

    public class NombreRecep
    {
        public string PrimerNombre { get; set; }
    }

    public class CodigoReceptor
    {
        public string TpoCdgIntRecep { get; set; }
        public string CdgIntRecep { get; set; }
    }

    public class ContactoReceptor
    {
        public string Nombre { get; set; }
        public string eMail { get; set; }
        public string Telefono { get; set; }
    }

    public class Totales
    {
        public string Moneda { get; set; }
        public string FctConv { get; set; }
        public string SubTotal { get; set; }
        public string MntBase { get; set; }
        public string MntImp { get; set; }
        public string VlrPagar { get; set; }
    }

    public class Impuestos
    {
        public string TipoImp { get; set; }
        public string TasaImp { get; set; }
        public string MontoBaseImp { get; set; }
        public string MontoImp { get; set; }
    }

    public class Retencion
    {
        public string TipoRet { get; set; }
        public string TasaRet { get; set; }
        public string MontoBaseRet { get; set; }
        public string MontoRet { get; set; }
    }

    public class Detalle
    {
        public string NroLinDet { get; set; }
        public CdgItem CdgItem { get; set; }
        public string DscItem { get; set; }
        public string QtyItem { get; set; }
        public string UnmdItem { get; set; }
        public string PrcBrutoItem { get; set; }
        public Impuestos ImpuestosDet { get; set; }
        public string MontoTotalItem { get; set; }
    }

    public class CdgItem
    {
        public string TpoCodigo { get; set; }
        public string VlrCodigo { get; set; }
    }

    public class CAE
    {
        public string Tipo { get; set; }
        public string Serie { get; set; }
        public string NumeroInicial { get; set; }
        public string NumeroFinal { get; set; }
        public string NroResolucion { get; set; }
        public string FechaResolucion { get; set; }
        public string ClaveTC { get; set; }
        public string Plazo { get; set; }
    }
}