import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;

/**
 * Penyimpanan dalam memori: LinkedHashMap menjaga urutan sisip sama dengan
 * urutan id, dan penghitung sederhana menetapkan id berurutan mulai dari 1.
 */
public class RepositoryMemori implements TugasRepository {

    private final Map<Integer, Tugas> data = new LinkedHashMap<>();
    private int urutan = 0;

    @Override
    public Tugas tambah(Tugas tugas) {
        urutan++;
        Tugas tersimpan = tugas.denganId(urutan);
        data.put(urutan, tersimpan);
        return tersimpan;
    }

    @Override
    public Optional<Tugas> cari(int id) {
        return Optional.ofNullable(data.get(id));
    }

    @Override
    public List<Tugas> semua() {
        return new ArrayList<>(data.values());
    }

    @Override
    public Optional<Tugas> simpan(Tugas tugas) {
        if (!data.containsKey(tugas.id())) {
            return Optional.empty();
        }
        data.put(tugas.id(), tugas);
        return Optional.of(tugas);
    }

    @Override
    public boolean hapus(int id) {
        return data.remove(id) != null;
    }
}
