package models

import (
	"time"

	"github.com/shopspring/decimal"
)

type Factura struct {
	ID                 string          `json:"transaccion_id"`
	CI                 string          `json:"ci"`
	NombreCliente      string          `json:"nombre_cliente"`
	NumeroFactura      string          `json:"numero_factura"`
	FechaEmision       time.Time       `json:"fecha_emision"`
	Subtotal           decimal.Decimal `json:"subtotal"`
	IVA                decimal.Decimal `json:"iva"`
	Total              decimal.Decimal `json:"total"`
	Estado             string          `json:"estado"`
	Cuf                string          `json:"cuf"`
	UrlFactura         string          `json:"url"`
	CodigoAutorizacion string          `json:"codigo_autorizacion"`
	FechaCreacion      time.Time       `json:"fecha_creacion"`
}

type DLQMessage struct {
	ID            int       `json:"-"`
	TransaccionID string    `json:"transaccion_id"`
	Mensaje       string    `json:"mensaje"`
	FechaCreacion time.Time `json:"fecha_creacion"`
	Reprocesado   bool      `json:"reprocesado"`
}

type RequestFacturacionModel struct {
	Cabecera Cabecera  `json:"cabecera"`
	Detalle  []Detalle `json:"detalle"`
}

type Cabecera struct {
	NitEmisor                    int64    `json:"nitEmisor"`
	RazonSocialEmisor            string   `json:"razonSocialEmisor"`
	Municipio                    string   `json:"municipio"`
	Telefono                     *string  `json:"telefono,omitempty"`
	NumeroFactura                string   `json:"numeroFactura"`
	CodigoSucursal               int      `json:"codigoSucursal"`
	Direccion                    string   `json:"direccion"`
	CodigoPuntoVenta             *int     `json:"codigoPuntoVenta,omitempty"`
	FechaEmision                 string   `json:"fechaEmision"` // formato: "2021-10-07T09:01:24.178"
	NombreRazonSocial            *string  `json:"nombreRazonSocial,omitempty"`
	CodigoTipoDocumentoIdentidad int      `json:"codigoTipoDocumentoIdentidad"`
	NumeroDocumento              string   `json:"numeroDocumento"`
	Complemento                  *string  `json:"complemento,omitempty"`
	CodigoCliente                string   `json:"codigoCliente"`
	CodigoMetodoPago             int      `json:"codigoMetodoPago"`
	NumeroTarjeta                *string  `json:"numeroTarjeta,omitempty"` // solo si MetodoPago == 2
	MontoTotal                   float64  `json:"montoTotal"`
	MontoTotalSujetoIva          float64  `json:"montoTotalSujetoIva"`
	TipoCambio                   float64  `json:"tipoCambio"`
	CodigoMoneda                 int      `json:"codigoMoneda"`
	MontoTotalMoneda             float64  `json:"montoTotalMoneda"`
	MontoGiftCard                *string  `json:"montoGiftCard,omitempty"`
	DescuentoAdicional           *float64 `json:"descuentoAdicional,omitempty"`
	CodigoExcepcion              *int     `json:"codigoExcepcion,omitempty"`
	Cafc                         *string  `json:"cafc,omitempty"`
	Leyenda                      string   `json:"leyenda"`
	Usuario                      string   `json:"usuario"`
	CodigoDocumentoSector        int      `json:"codigoDocumentoSector"`
	TipoEmision                  int      `json:"tipoEmision" xml:"tipoEmision"`
	TipoFactura                  int      `json:"tipoFactura" xml:"tipoFactura"`
}

type Detalle struct {
	ActividadEconomica string   `json:"actividadEconomica"`
	CodigoProductoSin  int      `json:"codigoProductoSin"`
	CodigoProducto     string   `json:"codigoProducto"`
	Descripcion        string   `json:"descripcion"`
	Cantidad           int      `json:"cantidad"`
	UnidadMedida       int      `json:"unidadMedida"`
	PrecioUnitario     float64  `json:"precioUnitario"`
	MontoDescuento     *float64 `json:"montoDescuento,omitempty"`
	SubTotal           float64  `json:"subTotal"`
	NumeroSerie        *string  `json:"numeroSerie,omitempty"`
	NumeroImei         *string  `json:"numeroImei,omitempty"`
}

type FacturaEventModel struct {
	TransaccionID string                  `json:"transaccion_id"`
	Estado        string                  `json:"estado"`
	Payload       RequestFacturacionModel `json:"payload"`
}
