package it.integry.integrywmsnative.gest.pv_ordini_acquisto;

import javax.inject.Inject;

import it.integry.integrywmsnative.core.data_store.db.entity.Griglia;
import it.integry.integrywmsnative.core.data_store.db.entity.Ordine;
import it.integry.integrywmsnative.core.data_store.db.repository.ArticoloGrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.GrigliaRepository;
import it.integry.integrywmsnative.core.data_store.db.repository.OrdineRepository;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.rest.consumers.PVOrdiniAcquistoRESTConsumer;
import it.integry.integrywmsnative.core.utility.UtilityDate;

public class PVOrdiniAcquistoGrigliaViewModel {

    private final PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer;
    private final ArticoloGrigliaRepository articoloGrigliaRepository;
    private final OrdineRepository ordineRepository;
    private final GrigliaRepository grigliaRepository;

    @Inject
    public PVOrdiniAcquistoGrigliaViewModel(PVOrdiniAcquistoRESTConsumer pvOrdiniAcquistoRESTConsumer,
                                            ArticoloGrigliaRepository articoloGrigliaRepository,
                                            OrdineRepository ordineRepository,
                                            GrigliaRepository grigliaRepository) {
        this.pvOrdiniAcquistoRESTConsumer = pvOrdiniAcquistoRESTConsumer;
        this.articoloGrigliaRepository = articoloGrigliaRepository;
        this.ordineRepository = ordineRepository;
        this.grigliaRepository = grigliaRepository;
    }

    public void createNewOrder(Griglia griglia, RunnableArgs<Ordine> onSuccess, RunnableArgs<Exception> onError) {
        Ordine ordine = new Ordine();
        ordine.setDataIns(UtilityDate.getDateInstance());
        ordine.setIdGriglia(griglia.getGrigliaId());
        ordine.setCodAlis(griglia.getCodAlis());
        ordine.setOrderNewProducts(true);
        ordineRepository.insert(ordine, id -> {
            ordine.setOrdineId(id);
            onSuccess.run(ordine);
        }, onError);
    }

    public void deleteOrder(Ordine ordine, Runnable onSuccess, RunnableArgs<Exception> onFail) {
        ordineRepository.delete(ordine, onSuccess, onFail);
    }

}
