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

import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

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

@Dao
public interface ArticoloOrdineDao {

    @Query("SELECT * from articoli_ordine")
    List<ArticoloOrdine> getAll();

    @Insert
    void insertAll(List<ArticoloOrdine> toInsert);

    @Insert
    void insert(ArticoloOrdine articolo);

    @Query("SELECT * FROM articoli_ordine where bar_code = :barcode and id_ordine = :ordine LIMIT 1")
    ArticoloOrdine findArticoloByOrdineAndBarcode(int ordine, String barcode);


    @Update
    void updateAll(List<ArticoloOrdine> toUpdate);

    @Update
    void update(ArticoloOrdine articolo);

    @Query("SELECT * FROM articoli_ordine where id_ordine = :ordineId")
    List<ArticoloOrdine> findArticoliByOrdine(int ordineId);

    @Query("SELECt * from articoli_ordine where cod_mart = :codMart and id_ordine = :ordineId LIMIT 1")
    ArticoloOrdine findArticoloByCodMartAndOrdine(int ordineId, String codMart);

    @Query(" SELECT articoli_ordine.* " +
            " FROM articoli_ordine " +
            " LEFT OUTER JOIN articoli_griglia on articoli_ordine.cod_mart = articoli_griglia.cod_mart " +
            " WHERE " +
            "       (" +
            "               articoli_ordine.bar_code = :barcode" +
            "               OR articoli_griglia.bar_code = :barcode" +
            "           )" +
            "     AND articoli_ordine.id_ordine = :ordineId " +
            " LIMIT 1")
    ArticoloOrdine findArticoloByBarcodeAndOrdine(int ordineId, String barcode);

    @Delete
    void delete(ArticoloOrdine articolo);

}
