package com.example.harjoitustyo;

import java.io.Serializable;
import java.time.LocalDate;

public class Tehtava implements Serializable {
    private static int idCounter = 1;

    private final int id;
    private String otsikko;
    private String kuvaus;
    private final LocalDate luontiPaiva;
    private LocalDate deadline;
    private LocalDate valmistumisPaiva;
    private boolean valmis;

    public Tehtava(String otsikko, String kuvaus, LocalDate deadline) {
        this.id = idCounter++;
        this.otsikko = otsikko;
        this.kuvaus = kuvaus;
        this.luontiPaiva = LocalDate.now();
        this.deadline = deadline;
        this.valmis = false;
    }

    /**
     * Asettaa luokan staattisen muuttujan tiettyyn arvoon
     * @param idCounter kentän uusi arvo
     */
    protected static void setIdCounter(int idCounter) {
        Tehtava.idCounter = idCounter;
    }

    /**
     * Asettaa tehtävän valmiiksi ja rekisteröi valmistumispäivän
     */
    public void teeValmiiksi() {
        this.valmis = true;
        this.valmistumisPaiva = LocalDate.now();
    }

    public void teeKeskeneraiseksi() {
        this.valmis = true;
        this.valmistumisPaiva = null;
    }

    /**
     * ListViewiä varten toString() metodi
     * @return tehtävän luontipäivä, otsikko, deadline
     */
    public String toString() {
        return this.getLuontiPaiva() + ", " + this.getOtsikko() + ", " + this.getDeadline();
    }

    public int getId() {
        return id;
    }

    public String getOtsikko() {
        return otsikko;
    }

    public String getKuvaus() {
        return kuvaus;
    }

    public LocalDate getLuontiPaiva() {
        return luontiPaiva;
    }

    public LocalDate getDeadline() {
        return deadline;
    }

    public LocalDate getValmistumisPaiva() {
        return valmistumisPaiva;
    }

    public boolean isValmis() {
        return valmis;
    }

    public void setOtsikko(String otsikko) {
        this.otsikko = otsikko;
    }

    public void setKuvaus(String kuvaus) {
        this.kuvaus = kuvaus;
    }

    public void setDeadline(LocalDate deadline) {
        this.deadline = deadline;
    }
}