package it.integry.integrywmsnative.core.settings;

import java.util.ArrayList;
import java.util.List;

import it.integry.integrywmsnative.core.model.Azienda;
import it.integry.integrywmsnative.core.model.MtbDepoPosizione;
import it.integry.integrywmsnative.core.model.dto.InternalCodAnagsDTO;
import it.integry.integrywmsnative.core.rest.model.AvailableCodMdepsDTO;
import it.integry.integrywmsnative.core.rest.model.DistribuzioneColloDTO;

public class DBSettingsModel {

    private List<String> availableProfiles = null;
    private List<AvailableCodMdepsDTO> availableCodMdep = null;
    private List<MtbDepoPosizione> availablePosizioni = null;

    private Azienda datiAzienda = null;
    private List<InternalCodAnagsDTO> internalCodAnags = null;

    private boolean enableCheckPartitaMagCheckPickingV;
    private boolean flagMultiClienteOrdV;
    private boolean flagUseCodAnagAziendale;
    private String defaultCausaleRettificaGiacenze;
    private DistribuzioneColloDTO.CriterioDistribuzione defaultCriterioDistribuzione;
    private boolean flagAskClienteInPickingLibero;
    private boolean flagPickLiberoAllowEmptyCliente;

    private boolean flagCanAddExtraItemSpedizione;
    private boolean flagCanAutoOpenNewULAccettazione;
    private boolean flagCanAddExtraQuantitySpedizione;
    private boolean flagEnableCheckDepositoSpedizione;
    private boolean flagUseNewPickingListSpedizione;
    private boolean flagVersamentoDirettoProduzione;
    private boolean flagAskPesoColloSpedizione;
    private boolean flagForceAllToColli;
    private boolean flagSpedizioneEnableManualPick;
    private boolean flagSpedizioneCanSelectMultipleOrders;
    private List<String> notePerditaDocInterni = new ArrayList<>();
    private boolean flagSpedizioneUseQtaOrd;
    private boolean flagOrdinaNuoviArticoliInGriglia;
    private boolean flagOrdinaArticoliOnScan;
    private String docInterniCheckFornitore;
    private String produzioneDefaultCodAnag;
    private boolean flagPrintPackingListOnOrderClose;
    private boolean flagPrintEtichetteOnOrderClose;
    private int onNumCnfInputChanged = 1;
    private int onQtaTotInputChanged = 1;
    private boolean flagAccettazioneUseQtaOrd = false;
    private boolean flagPickLiberoAllowEmptyDest = false;
    private boolean flagAskInfoAggiuntiveSpedizione = false;
    private String filterFornitoreProd;
    private String codDtipOrdTrasfV;
    private boolean notifyLotStatus = false;

    public boolean isFlagSpedizioneEnableFakeGiacenza() {
        return flagSpedizioneEnableFakeGiacenza;
    }

    public DBSettingsModel setFlagSpedizioneEnableFakeGiacenza(boolean flagSpedizioneEnableFakeGiacenza) {
        this.flagSpedizioneEnableFakeGiacenza = flagSpedizioneEnableFakeGiacenza;
        return this;
    }

    private boolean flagSpedizioneEnableFakeGiacenza;

    public List<String> getAvailableProfiles() {
        return availableProfiles;
    }

    public List<MtbDepoPosizione> getAvailablePosizioni() {
        return availablePosizioni;
    }

    public void setAvailableProfiles(List<String> availableProfiles) {
        this.availableProfiles = availableProfiles;
    }

    public void setAvailablePosizioni(List<MtbDepoPosizione> availablePosizioni) {
        this.availablePosizioni = availablePosizioni;
    }

    public Azienda getDatiAzienda() {
        return datiAzienda;
    }

    public DBSettingsModel setDatiAzienda(Azienda datiAzienda) {
        this.datiAzienda = datiAzienda;
        return this;
    }

    public List<InternalCodAnagsDTO> getInternalCodAnags() {
        return internalCodAnags;
    }

    public DBSettingsModel setInternalCodAnags(List<InternalCodAnagsDTO> internalCodAnags) {
        this.internalCodAnags = internalCodAnags;
        return this;
    }

    public List<AvailableCodMdepsDTO> getAvailableCodMdep() {
        return availableCodMdep;
    }

    public void setAvailableCodMdep(List<AvailableCodMdepsDTO> availableCodMdep) {
        this.availableCodMdep = availableCodMdep;
    }

    public boolean isEnableCheckPartitaMagCheckPickingV() {
        return enableCheckPartitaMagCheckPickingV;
    }

    public DBSettingsModel setEnableCheckPartitaMagCheckPickingV(boolean enableCheckPartitaMagCheckPickingV) {
        this.enableCheckPartitaMagCheckPickingV = enableCheckPartitaMagCheckPickingV;
        return this;
    }

    public boolean isFlagMultiClienteOrdV() {
        return flagMultiClienteOrdV;
    }

    public DBSettingsModel setFlagMultiClienteOrdV(boolean flagMultiClienteOrdV) {
        this.flagMultiClienteOrdV = flagMultiClienteOrdV;
        return this;
    }

    public boolean isFlagUseCodAnagAziendale() {
        return flagUseCodAnagAziendale;
    }

    public DBSettingsModel setFlagUseCodAnagAziendale(boolean flagUseCodAnagAziendale) {
        this.flagUseCodAnagAziendale = flagUseCodAnagAziendale;
        return this;
    }

    public String getDefaultCausaleRettificaGiacenze() {
        return defaultCausaleRettificaGiacenze;
    }

    public DBSettingsModel setDefaultCausaleRettificaGiacenze(String defaultCausaleRettificaGiacenze) {
        this.defaultCausaleRettificaGiacenze = defaultCausaleRettificaGiacenze;
        return this;
    }

    public DistribuzioneColloDTO.CriterioDistribuzione getDefaultCriterioDistribuzione() {
        return defaultCriterioDistribuzione;
    }

    public DBSettingsModel setDefaultCriterioDistribuzione(String defaultCriterioDistribuzione) {
        this.defaultCriterioDistribuzione = DistribuzioneColloDTO.CriterioDistribuzione.fromString(defaultCriterioDistribuzione);
        return this;
    }

    public boolean isFlagAskClienteInPickingLibero() {
        return flagAskClienteInPickingLibero;
    }

    public DBSettingsModel setFlagAskClienteInPickingLibero(boolean flagAskClienteInPickingLibero) {
        this.flagAskClienteInPickingLibero = flagAskClienteInPickingLibero;
        return this;
    }

    public boolean isFlagPickLiberoAllowEmptyCliente() {
        return flagPickLiberoAllowEmptyCliente;
    }

    public DBSettingsModel setFlagPickLiberoAllowEmptyCliente(boolean flagPickLiberoAllowEmptyCliente) {
        this.flagPickLiberoAllowEmptyCliente = flagPickLiberoAllowEmptyCliente;
        return this;
    }

    public boolean isFlagCanAddExtraItemSpedizione() {
        return flagCanAddExtraItemSpedizione;
    }

    public DBSettingsModel setFlagCanAddExtraItemSpedizione(boolean flagCanAddExtraItemSpedizione) {
        this.flagCanAddExtraItemSpedizione = flagCanAddExtraItemSpedizione;
        return this;
    }

    public boolean isFlagCanAutoOpenNewULAccettazione() {
        return flagCanAutoOpenNewULAccettazione;
    }

    public DBSettingsModel setFlagCanAutoOpenNewULAccettazione(boolean flagCanAutoOpenNewULAccettazione) {
        this.flagCanAutoOpenNewULAccettazione = flagCanAutoOpenNewULAccettazione;
        return this;
    }

    public boolean isFlagCanAddExtraQuantitySpedizione() {
        return flagCanAddExtraQuantitySpedizione;
    }

    public DBSettingsModel setFlagCanAddExtraQuantitySpedizione(boolean flagCanAddExtraQuantitySpedizione) {
        this.flagCanAddExtraQuantitySpedizione = flagCanAddExtraQuantitySpedizione;
        return this;
    }


    public boolean isFlagEnableCheckDepositoSpedizione() {
        return flagEnableCheckDepositoSpedizione;
    }

    public DBSettingsModel setFlagEnableCheckDepositoSpedizione(boolean flagEnableCheckDepositoSpedizione) {
        this.flagEnableCheckDepositoSpedizione = flagEnableCheckDepositoSpedizione;
        return this;
    }

    public boolean isFlagAskPesoColloSpedizione() {
        return flagAskPesoColloSpedizione;
    }

    public DBSettingsModel setFlagAskPesoColloSpedizione(boolean flagAskPesoColloSpedizione) {
        this.flagAskPesoColloSpedizione = flagAskPesoColloSpedizione;
        return this;
    }

    public boolean isFlagForceAllToColli() {
        return flagForceAllToColli;
    }

    public DBSettingsModel setFlagForceAllToColli(boolean flagForceAllToColli) {
        this.flagForceAllToColli = flagForceAllToColli;
        return this;
    }

    public boolean isFlagUseNewPickingListSpedizione() {
        return flagUseNewPickingListSpedizione;
    }

    public DBSettingsModel setFlagUseNewPickingListSpedizione(boolean flagUseNewPickingListSpedizione) {
        this.flagUseNewPickingListSpedizione = flagUseNewPickingListSpedizione;
        return this;
    }

    public boolean isFlagVersamentoDirettoProduzione() {
        return flagVersamentoDirettoProduzione;
    }

    public DBSettingsModel setFlagVersamentoDirettoProduzione(boolean flagVersamentoDirettoProduzione) {
        this.flagVersamentoDirettoProduzione = flagVersamentoDirettoProduzione;
        return this;
    }

    public boolean isFlagSpedizioneEnableManualPick() {
        return flagSpedizioneEnableManualPick;
    }

    public DBSettingsModel setFlagSpedizioneEnableManualPick(boolean flagSpedizioneEnableManualPick) {
        this.flagSpedizioneEnableManualPick = flagSpedizioneEnableManualPick;
        return this;
    }

    public boolean isFlagSpedizioneCanSelectMultipleOrders() {
        return flagSpedizioneCanSelectMultipleOrders;
    }

    public DBSettingsModel setFlagSpedizioneCanSelectMultipleOrders(boolean flagSpedizioneCanSelectMultipleOrders) {
        this.flagSpedizioneCanSelectMultipleOrders = flagSpedizioneCanSelectMultipleOrders;
        return this;
    }

    public boolean isFlagSpedizioneUseQtaOrd() {
        return flagSpedizioneUseQtaOrd;
    }

    public DBSettingsModel setFlagSpedizioneUseQtaOrd(boolean flagSpedizioneUseQtaOrd) {
        this.flagSpedizioneUseQtaOrd = flagSpedizioneUseQtaOrd;
        return this;
    }

    public DBSettingsModel setFlagOrdinaNuoviArticoliInGriglia(boolean flagOrdinaNuoviArticoliInGriglia) {
        this.flagOrdinaNuoviArticoliInGriglia = flagOrdinaNuoviArticoliInGriglia;
        return this;
    }

    public boolean getFlagOrdinaNuoviArticoliInGriglia() {
        return this.flagOrdinaNuoviArticoliInGriglia;
    }

    public String getProduzioneDefaultCodAnag() {
        return produzioneDefaultCodAnag;
    }

    public DBSettingsModel setProduzioneDefaultCodAnag(String produzioneDefaultCodAnag) {
        this.produzioneDefaultCodAnag = produzioneDefaultCodAnag;
        return this;
    }

    public boolean isFlagPrintPackingListOnOrderClose() {
        return flagPrintPackingListOnOrderClose;
    }

    public DBSettingsModel setFlagPrintPackingListOnOrderClose(boolean flagPrintPackingListOnOrderClose) {
        this.flagPrintPackingListOnOrderClose = flagPrintPackingListOnOrderClose;
        return this;
    }

    public boolean isFlagPrintEtichetteOnOrderClose() {
        return flagPrintEtichetteOnOrderClose;
    }

    public DBSettingsModel setFlagPrintEtichetteOnOrderClose(boolean flagPrintEtichetteOnOrderClose) {
        this.flagPrintEtichetteOnOrderClose = flagPrintEtichetteOnOrderClose;
        return this;
    }

    public int getOnNumCnfInputChanged() {
        return onNumCnfInputChanged;
    }

    public DBSettingsModel setOnNumCnfInputChanged(int onNumCnfInputChanged) {
        this.onNumCnfInputChanged = onNumCnfInputChanged;
        return this;
    }

    public int getOnQtaTotInputChanged() {
        return onQtaTotInputChanged;
    }

    public DBSettingsModel setOnQtaTotInputChanged(int onQtaTotInputChanged) {
        this.onQtaTotInputChanged = onQtaTotInputChanged;
        return this;
    }

    public List<String> getNotePerditaDocInterni() {
        return notePerditaDocInterni;
    }

    public DBSettingsModel setNotePerditaDocInterni(List<String> notePerditaDocInterni) {
        this.notePerditaDocInterni = notePerditaDocInterni;
        return this;
    }

    public String getDocInterniCheckFornitore() {
        return docInterniCheckFornitore;
    }

    public DBSettingsModel setDocInterniCheckFornitore(String docInterniCheckFornitore) {
        this.docInterniCheckFornitore = docInterniCheckFornitore;
        return this;
    }

    public boolean isFlagAccettazioneUseQtaOrd() {
        return flagAccettazioneUseQtaOrd;
    }

    public DBSettingsModel setFlagAccettazioneUseQtaOrd(boolean flagAccettazioneUseQtaOrd) {
        this.flagAccettazioneUseQtaOrd = flagAccettazioneUseQtaOrd;
        return this;
    }

    public boolean isFlagPickLiberoAllowEmptyDest() {
        return flagPickLiberoAllowEmptyDest;
    }

    public DBSettingsModel setFlagPickLiberoAllowEmptyDest(boolean flagPickLiberoAllowEmptyDest) {
        this.flagPickLiberoAllowEmptyDest = flagPickLiberoAllowEmptyDest;
        return this;
    }


    public boolean isFlagOrdinaArticoliOnScan() {
        return flagOrdinaArticoliOnScan;
    }

    public DBSettingsModel setFlagOrdinaArticoliOnScan(boolean flagOrdinaArticoliOnScan) {
        this.flagOrdinaArticoliOnScan = flagOrdinaArticoliOnScan;
        return this;
    }

    public boolean isFlagAskInfoAggiuntiveSpedizione() {
        return flagAskInfoAggiuntiveSpedizione;
    }

    public DBSettingsModel setFlagAskInfoAggiuntiveSpedizione(boolean flagAskInfoAggiuntiveSpedizione) {
        this.flagAskInfoAggiuntiveSpedizione = flagAskInfoAggiuntiveSpedizione;
        return this;
    }

    public String getFilterFornitoreProd() {
        return filterFornitoreProd;
    }

    public DBSettingsModel setFilterFornitoreProd(String filterFornitoreProd) {
        this.filterFornitoreProd = filterFornitoreProd;
        return this;
    }

    public String getCodDtipOrdTrasfV() {
        return codDtipOrdTrasfV;
    }

    public DBSettingsModel setCodDtipOrdTrasfV(String codDtipOrdTrasfV) {
        this.codDtipOrdTrasfV = codDtipOrdTrasfV;
        return this;
    }

    public boolean isNotifyLotStatus() {
        return notifyLotStatus;
    }

    public DBSettingsModel setNotifyLotStatus(boolean notifyLotStatus) {
        this.notifyLotStatus = notifyLotStatus;
        return this;
    }
}
