package types

import (
	"fmt"
	"time"

	"gorm.io/gorm"
)

type BundleData struct {
	Grupo6              string         `json:"grupo6"`
	Po                  int            `json:"po" gorm:"index"`
	Co                  int            `json:"co"`
	Colada              string         `json:"colada"`
	Calidad             string         `json:"calidad"`
	Matnr               string         `json:"matnr"`
	Dibujo              int            `json:"dibujo"`
	Operador            string         `json:"operador"`
	Serie               int            `json:"serie"`
	Nromatricula        string         `gorm:"primaryKey" json:"nromatricula"`
	NroBulto            string         `json:"nro_bulto"`
	EtiquetaDoble       string         `json:"etiqueta_doble"`
	Fecha               int            `json:"fecha"`
	Turno               string         `json:"turno"`
	Observacion1        string         `json:"observacion1"`
	Observacion2        string         `json:"observacion2"`
	Observacion3        string         `json:"observacion3"`
	PaqueteLongitud     float64        `json:"paquete_longitud"`
	PaqueteAncho        int            `json:"paquete_ancho"`
	PaqueteAlto         float64        `json:"paquete_alto"`
	PaquetePeso         int            `json:"paquete_peso"`
	PaqueteNroSecciones int            `json:"paquete_nro_secciones"`
	PaqueteNroMantos    int            `json:"paquete_nro_mantos"`
	PaqueteNroSeccManto int            `json:"paquete_nro_secc_manto"`
	SeccionTipo         string         `gorm:"index" json:"seccion_tipo"`
	SeccionLongitud     int            `json:"seccion_longitud"`
	SeccionAncho        float64        `json:"seccion_ancho"`
	SeccionAlto         float64        `json:"seccion_alto"`
	Idioma              string         `json:"idioma"`
	Destino             int            `json:"destino"`
	Hora                int            `json:"hora"`
	Horario             int            `json:"horario"`
	Inst                string         `json:"inst"`
	Tren                int            `json:"tren"`
	Normed              string         `json:"normed"`
	Norpro              string         `json:"norpro"`
	Nortol              string         `json:"nortol"`
	Spras               string         `json:"spras"`
	Statu               int            `json:"statu"`
	Crlf                string         `json:"crlf"`
	Maquina             int            `json:"maquina"`
	Padre               string         `json:"padre"`
	Paqpadre            string         `json:"paqpadre"`
	RelevantTime        string         `json:"relevant_time"`
	Desvio              float64        `json:"desvio"`
	Pesoteorico         float64        `json:"pesoteorico"`
	PesoteoricoReal     float64        `json:"pesoteorico_real"`
	DesvioTeoricoReal   float64        `json:"desvio_teorico_real"`
	FechaImpresion      string         `json:"fecha_impresion"`
	PesoNivel1          float64        `json:"peso_nivel1"`
	L3Sended            bool           `json:"l3_sended,omitempty"`
	Confirmed           bool           `json:"confirmed,omitempty"`
	SAP                 bool           `json:"sap,omitempty"`
	CreatedAt           time.Time      `gorm:"->;<-:create" json:"createdat,omitempty"`
	UpdatedAt           time.Time      `json:"updatedat,omitempty"`
	DeletedAt           gorm.DeletedAt `gorm:"index" json:"deletedat,omitempty"`
}

func (BundleData) TableName() string {
	return "bundles"
}

func (b *BundleData) FormatDesvio() string {
	return fmt.Sprintf("%.3f", b.Desvio)
}

func (b *BundleData) FormatSerie() string {
	if b.Serie == 1 {
		return "AUTO"
	} else if b.Serie == 9 {
		return "REPT."
	} else {
		return "MANUAL"
	}
}

func (b *BundleData) FormatCreatedAt() string {
	return b.CreatedAt.Format("02/01/2006 15:04:03")
}
