package it.integry.integrywmsnative.core.data_store.db.entity;

import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.PrimaryKey;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

import it.integry.integrywmsnative.core.data_store.db.interfaces.EntityModelInterface;

@Entity(tableName = InventarioRoomDTO.TABLE_NAME)
public class InventarioRoomDTO extends BaseSyncDTO implements EntityModelInterface {

    public static final String TABLE_NAME = "inventari";

    public static class Columns {
        public static final String ID_INVENTARIO = "id_inventario";
        public static final String COD_MDEP = "cod_mdep";
        public static final String DATA_INVENTARIO = "data_inventario";
        public static final String DATA_REG = "data_reg";
        public static final String DATA_VER = "data_ver";
        public static final String FILTRO = "filtro";
        public static final String FLAG_STATO = "flag_stato";
        public static final String FLAG_OPERAZIONE = "flag_operazione";
        public static final String COD_ANAG = "cod_anag";
        public static final String COD_DTIP = "cod_dtip";
        public static final String INSERITO_DA = "inserito_da";
        public static final String REGISTRATO_DA = "registrato_da";
        public static final String VERIFICATO_DA = "verificato_da";
        public static final String DATA_ORA_INIZIO = "data_ora_inizio";
        public static final String DATA_ORA_FINE = "data_ora_fine";
        public static final String CAUSALE = "causale";
        public static final String ZONA = "zona";
    }

    /** The unique ID of the cheese. */
    @PrimaryKey(autoGenerate = true)
    @ColumnInfo(index = true, name = BaseSyncDTO.Columns.ID)
    private Long id;

    /** The unique ID of the cheese. */
    @ColumnInfo(index = true, name = Columns.ID_INVENTARIO)
    private Long idInventario;

    @NonNull
    @ColumnInfo(name = Columns.COD_MDEP)
    private String codMdep;

    @ColumnInfo(name = Columns.DATA_INVENTARIO)
    private LocalDate dataInventario;

    @ColumnInfo(name = Columns.DATA_REG)
    private LocalDateTime dataReg;

    @ColumnInfo(name = Columns.DATA_VER)
    private LocalDateTime dataVer;

    @ColumnInfo(name = Columns.FILTRO)
    private String filtro;

    @ColumnInfo(name = Columns.FLAG_STATO)
    private String flagStato;

    @ColumnInfo(name = Columns.FLAG_OPERAZIONE)
    private String flagOperazione;

    @ColumnInfo(name = Columns.COD_ANAG)
    private String codAnag;

    @ColumnInfo(name = Columns.COD_DTIP)
    private String codDtip;

    @ColumnInfo(name = Columns.INSERITO_DA)
    private String inseritoDa;

    @ColumnInfo(name = Columns.REGISTRATO_DA)
    private String registratoDa;

    @ColumnInfo(name = Columns.VERIFICATO_DA)
    private String verificatoDa;

    @ColumnInfo(name = Columns.DATA_ORA_INIZIO)
    private LocalDateTime dataOraInizio;

    @ColumnInfo(name = Columns.DATA_ORA_FINE)
    private LocalDateTime dataOraFine;

    @ColumnInfo(name = Columns.CAUSALE)
    private String causale;

    @ColumnInfo(name = Columns.ZONA)
    private String zona;

    @Ignore
    private List<InventarioRowRoomDTO> inventarioRowList;

    public Long getIdInventario() {
        return idInventario;
    }

    public void setIdInventario(Long idInventario) {
        this.idInventario = idInventario;
    }

    @NonNull
    public String getCodMdep() {
        return codMdep;
    }

    public void setCodMdep(@NonNull String codMdep) {
        this.codMdep = codMdep;
    }

    public LocalDate getDataInventario() {
        return dataInventario;
    }

    public void setDataInventario(LocalDate dataInventario) {
        this.dataInventario = dataInventario;
    }

    public LocalDateTime getDataReg() {
        return dataReg;
    }

    public void setDataReg(LocalDateTime dataReg) {
        this.dataReg = dataReg;
    }

    public LocalDateTime getDataVer() {
        return dataVer;
    }

    public void setDataVer(LocalDateTime dataVer) {
        this.dataVer = dataVer;
    }

    public String getFiltro() {
        return filtro;
    }

    public void setFiltro(String filtro) {
        this.filtro = filtro;
    }

    public String getFlagStato() {
        return flagStato;
    }

    public void setFlagStato(String flagStato) {
        this.flagStato = flagStato;
    }

    public String getFlagOperazione() {
        return flagOperazione;
    }

    public void setFlagOperazione(String flagOperazione) {
        this.flagOperazione = flagOperazione;
    }

    public String getCodAnag() {
        return codAnag;
    }

    public void setCodAnag(String codAnag) {
        this.codAnag = codAnag;
    }

    public String getCodDtip() {
        return codDtip;
    }

    public void setCodDtip(String codDtip) {
        this.codDtip = codDtip;
    }

    public String getInseritoDa() {
        return inseritoDa;
    }

    public void setInseritoDa(String inseritoDa) {
        this.inseritoDa = inseritoDa;
    }

    public String getRegistratoDa() {
        return registratoDa;
    }

    public void setRegistratoDa(String registratoDa) {
        this.registratoDa = registratoDa;
    }

    public String getVerificatoDa() {
        return verificatoDa;
    }

    public void setVerificatoDa(String verificatoDa) {
        this.verificatoDa = verificatoDa;
    }

    public LocalDateTime getDataOraInizio() {
        return dataOraInizio;
    }

    public void setDataOraInizio(LocalDateTime dataOraInizio) {
        this.dataOraInizio = dataOraInizio;
    }

    public LocalDateTime getDataOraFine() {
        return dataOraFine;
    }

    public void setDataOraFine(LocalDateTime dataOraFine) {
        this.dataOraFine = dataOraFine;
    }

    public String getCausale() {
        return causale;
    }

    public void setCausale(String causale) {
        this.causale = causale;
    }

    public String getZona() {
        return zona;
    }

    public void setZona(String zona) {
        this.zona = zona;
    }

    public List<InventarioRowRoomDTO> getInventarioRowList() {
        return inventarioRowList;
    }

    public void setInventarioRowList(List<InventarioRowRoomDTO> inventarioRowList) {
        this.inventarioRowList = inventarioRowList;
    }
}
