import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

/**
 * Menyimpan dan memuat DaftarTugas lewat berkas teks.
 * Format satu baris: id|judul|status  dengan status "aktif" atau "selesai".
 */
public class PenyimpananTugas {

    private final Path berkas;

    public PenyimpananTugas(Path berkas) {
        this.berkas = berkas;
    }

    /** Menulis seluruh isi daftar ke berkas; berkas lama ditimpa penuh. */
    public void simpan(DaftarTugas daftar) throws IOException {
        List<String> baris = new ArrayList<>();
        for (Tugas tugas : daftar.semua()) {
            String status = tugas.selesai() ? "selesai" : "aktif";
            baris.add(tugas.id() + "|" + tugas.judul() + "|" + status);
        }
        Files.write(berkas, baris, StandardCharsets.UTF_8);
    }

    /**
     * Membaca berkas menjadi DaftarTugas.
     * Baris kosong diabaikan; baris tanpa tiga bagian memicu IOException.
     */
    public DaftarTugas muat() throws IOException {
        DaftarTugas daftar = new DaftarTugas();
        for (String baris : Files.readAllLines(berkas, StandardCharsets.UTF_8)) {
            if (baris.isBlank()) {
                continue;
            }
            String[] bagian = baris.split("\\|", 3);
            if (bagian.length != 3) {
                throw new IOException("Baris rusak: \"" + baris + "\"");
            }
            int id = Integer.parseInt(bagian[0].strip());
            boolean selesai = bagian[2].strip().equals("selesai");
            daftar.tambahMuatan(new Tugas(id, bagian[1], selesai));
        }
        return daftar;
    }
}
