import java.util.List;

// Abstraksi penyimpanan gudang. Layanan Gudang hanya mengenal interface ini,
// sehingga lapisan penyimpanan dapat diganti (memori, berkas, JDBC)
// tanpa menyentuh satu baris aturan bisnis pun.
public interface GudangRepository {

    /** Mendaftarkan barang baru; menolak kode yang sudah terdaftar. */
    void simpan(Barang barang);

    /** Mencari satu barang berdasarkan kode; null bila tidak terdaftar. */
    Barang cari(String kode);

    /** Seluruh barang, terurut naik berdasarkan kode. */
    List<Barang> semuaBarang();

    /** Memperbarui stok satu barang ke nilai baru. */
    void perbaruiStok(String kode, int stokBaru);

    /** Mencatat mutasi (id 0 pada input diganti id baru) dan mengembalikannya. */
    MutasiStok catat(MutasiStok mutasi);

    /** Seluruh mutasi, terurut naik berdasarkan id. */
    List<MutasiStok> riwayat();
}
