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

import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;

import java.math.BigDecimal;
import java.util.HashMap;

import it.integry.integrywmsnative.core.data_store.db.entity.ArticoloOrdine;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.utility.UtilityDate;

public class ArticoloDTO {

    public String codMart;
    public String descrizione;
    public String untMis;
    public float qtaCnf;
    public String barcode;
    public float merceDaRic;
    public float mediaSett;
    public String flagQtaMultipla;
    public String flagTracciabilita;
    public float qtaMinOrdinabile;
    public boolean newNoPromo;
    private int ggScadenza;
    private float giacenza;
    private float qtaPrevistaVendita;
    private float qtaProposta;
    private float qtaOrd;


    public String getCodMart() {
        return codMart;
    }

    public void setCodMart(String codMart) {
        this.codMart = codMart;
    }

    public String getDescrizione() {
        return descrizione;
    }

    public void setDescrizione(String descrizione) {
        this.descrizione = descrizione;
    }

    public String getUntMis() {
        return untMis;
    }

    public void setUntMis(String untMis) {
        this.untMis = untMis;
    }

    public float getQtaCnf() {
        return qtaCnf;
    }

    public void setQtaCnf(float qtaCnf) {
        this.qtaCnf = qtaCnf;
    }

    public String getBarCode() {
        return barcode;
    }

    public void setBarCode(String barCode) {
        this.barcode = barCode;
    }

    public float getMerceDaRic() {
        return merceDaRic;
    }

    public void setMerceDaRic(float merceDaRic) {
        this.merceDaRic = merceDaRic;
    }

    public float getMediaSett() {
        return mediaSett;
    }

    public void setMediaSett(float mediaSett) {
        this.mediaSett = mediaSett;
    }

    public String getFlagQtaMultipla() {
        return flagQtaMultipla;
    }

    public void setFlagQtaMultipla(String flagQtaMultipla) {
        this.flagQtaMultipla = flagQtaMultipla;
    }

    public float getQtaMinOrdinabile() {
        return qtaMinOrdinabile;
    }

    public void setQtaMinOrdinabile(float qtaMinOrdinabile) {
        this.qtaMinOrdinabile = qtaMinOrdinabile;
    }

    public String getBarcode() {
        return barcode;
    }

    public void setBarcode(String barcode) {
        this.barcode = barcode;
    }

    public int getGgScadenza() {
        return ggScadenza;
    }

    public void setGgScadenza(int ggScadenza) {
        this.ggScadenza = ggScadenza;
    }

    public float getGiacenza() {
        return giacenza;
    }

    public void setGiacenza(float giacenza) {
        this.giacenza = giacenza;
    }

    public float getQtaPrevistaVendita() {
        return qtaPrevistaVendita;
    }

    public void setQtaPrevistaVendita(float qtaPrevistaVendita) {
        this.qtaPrevistaVendita = qtaPrevistaVendita;
    }

    public float getQtaProposta() {
        return qtaProposta;
    }

    public void setQtaProposta(float qtaProposta) {
        this.qtaProposta = qtaProposta;
    }

    public String getFlagTracciabilita() {
        return flagTracciabilita;
    }

    public ArticoloDTO setFlagTracciabilita(String flagTracciabilita) {
        this.flagTracciabilita = flagTracciabilita;
        return this;
    }

    public boolean isNewNoPromo() {
        return newNoPromo;
    }

    public ArticoloDTO setNewNoPromo(boolean newNoPromo) {
        this.newNoPromo = newNoPromo;
        return this;
    }

    public float getQtaOrd() {
        return qtaOrd;
    }

    public ArticoloDTO setQtaOrd(float qtaOrd) {
        this.qtaOrd = qtaOrd;
        return this;
    }

    public ArticoloOrdine convertToArticoloOrdine(Ordine ordine) {
        ArticoloOrdine articolo = new ArticoloOrdine();

        articolo.setIdOrdine(ordine.getOrdineId());

        articolo.setBarCode(this.getBarCode());
        articolo.setCodMart(this.getCodMart());
        articolo.setMediaSett(this.getMediaSett());
        articolo.setFlagQtaMultipla(this.getFlagQtaMultipla());
        articolo.setQtaMinOrdinabile(this.getQtaMinOrdinabile());
        articolo.setMerceDaRic(this.getMerceDaRic());
        articolo.setQtaCnf(this.getQtaCnf());
        articolo.setUntMis(this.getUntMis());
        articolo.setDescrizione(this.getDescrizione());
        articolo.setDataIns(UtilityDate.getDateInstance());
        articolo.setGgScadenza(this.getGgScadenza());
        articolo.setGiacenza(BigDecimal.valueOf(this.getGiacenza()));
        articolo.setQtaPrevistaVendita(BigDecimal.valueOf(this.getQtaPrevistaVendita()));
        articolo.setQtaProposta(BigDecimal.valueOf(this.getQtaProposta()));
        articolo.setNewNoPromo(this.isNewNoPromo());
        articolo.setSystemNote(generateSystemNote());
        articolo.setQtaOrd(this.getQtaOrd());

        return articolo;
    }

    public String generateSystemNote() {
        HashMap<String, String> pairs = new HashMap<>();
        pairs.put("qta_proposta", String.valueOf(qtaProposta));
        pairs.put("giacenza", String.valueOf(giacenza));

        return new JSONObject(pairs).toString();
    }


    public int getSortByBarcodeCondition(String barcode) {
        if (codMart.equalsIgnoreCase(barcode))
            return 1;
        if (barcode != null) {
            if (barcode.equalsIgnoreCase(barcode))
                return 2;
            if (StringUtils.leftPad(barcode, 13, "0").equalsIgnoreCase(barcode))
                return 3;
        }
        return 100;
    }
}
