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.ArrayList;
import java.util.List;

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

@Dao
public interface ArticoloGrigliaDao {
    @Query("SELECT * from articoli_griglia")
    List<ArticoloGriglia> getAll();

    @Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE cod_mart = :codMart AND id_griglia = :idGriglia")
    Integer getIdArticoloByGrigliaAndCodMart(int idGriglia, String codMart);

    @Insert
    void insertAll(List<ArticoloGriglia> articoli);
    @Insert
    Long insert(ArticoloGriglia articolo);
    @Update
    void updateAll(List<ArticoloGriglia> articoli);
    @Update
    void update(ArticoloGriglia articolo);

    @Delete
    void deleteList(List<ArticoloGriglia> toDelete);

    @Query("SELECT * FROM articoli_griglia WHERE bar_code = :barcode AND id_griglia = :idGriglia LIMIT 1")
    ArticoloGriglia findArticoloByBarcodeAndGriglia(String barcode, int idGriglia);

    @Query("SELECT * FROM articoli_griglia WHERE cod_mart = :codMart AND id_griglia = :idGriglia LIMIT 1")
    ArticoloGriglia findArticoloByCodMartAndGriglia(String codMart, int idGriglia);

    @Query("SELECT * FROM articoli_griglia WHERE (cod_mart = :scan OR bar_code =:scan )AND id_griglia = :idGriglia LIMIT 1")
    ArticoloGriglia findArticoloByScanAndGriglia(String scan, int idGriglia);

    @Query("SELECT articolo_griglia_id FROM articoli_griglia WHERE (cod_mart = :codMart AND bar_code =:barCode )AND id_griglia = :idGriglia LIMIT 1")
    Integer getIdArticoloByGrigliaAndBarcodeAndCodMart(int idGriglia, String barCode, String codMart);

    @Query("SELECT * FROM articoli_griglia WHERE id_griglia = :grigliaId")
    List<ArticoloGriglia> getArticoliFromGriglia(int grigliaId);
}
