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, penghitung sederhana menetapkan id berurutan mulai dari 1.
 */
public class RepositoryTugasWebMemori implements RepositoryTugasWeb {

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

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

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

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

    @Override
    public Optional<TugasWeb> perbarui(TugasWeb 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;
    }
}
