import java.util.ArrayList;
import java.util.List;

/** Penyimpanan di memori: cepat, tanpa berkas, cocok untuk pengujian. */
public class KontakDaoMemori implements KontakDao {

    private final List<Kontak> simpanan = new ArrayList<>();

    @Override
    public List<Kontak> muatSemua() {
        return List.copyOf(simpanan);
    }

    @Override
    public void tambah(Kontak kontak) {
        simpanan.add(kontak);
    }

    @Override
    public void perbarui(Kontak kontak) throws PersistensiGagalException {
        int posisi = indeksDariId(kontak.id());
        if (posisi < 0) {
            throw new PersistensiGagalException(
                    "id " + kontak.id() + " tidak ada di penyimpanan memori");
        }
        simpanan.set(posisi, kontak);
    }

    @Override
    public void hapus(int id) throws PersistensiGagalException {
        int posisi = indeksDariId(id);
        if (posisi < 0) {
            throw new PersistensiGagalException(
                    "id " + id + " tidak ada di penyimpanan memori");
        }
        simpanan.remove(posisi);
    }

    private int indeksDariId(int id) {
        for (int i = 0; i < simpanan.size(); i++) {
            if (simpanan.get(i).id() == id) {
                return i;
            }
        }
        return -1;
    }
}
