from fastapi import FastAPI, status

from app.models import TugasBuat, TugasTampil

app = FastAPI(title="API Manajemen Tugas", version="0.2.0")

tugas_store: list[dict] = []


@app.get("/health")
def health() -> dict[str, str]:
    return {"status": "ok"}


@app.get("/tugas", response_model=list[TugasTampil])
def daftar_tugas() -> list[dict]:
    return tugas_store


@app.post("/tugas", response_model=TugasTampil, status_code=status.HTTP_201_CREATED)
def buat_tugas(payload: TugasBuat) -> dict:
    tugas_baru = {
        "id": len(tugas_store) + 1,
        "judul": payload.judul,
        "selesai": False,
    }
    tugas_store.append(tugas_baru)
    return tugas_baru


@app.get("/tugas/{tugas_id}", response_model=TugasTampil)
def ambil_tugas(tugas_id: int) -> dict:
    for tugas in tugas_store:
        if tugas["id"] == tugas_id:
            return tugas
    raise LookupError(f"tugas dengan id {tugas_id} tidak ditemukan")


@app.delete("/tugas/{tugas_id}", status_code=status.HTTP_204_NO_CONTENT)
def hapus_tugas(tugas_id: int) -> None:
    for indeks, tugas in enumerate(tugas_store):
        if tugas["id"] == tugas_id:
            del tugas_store[indeks]
            return
    raise LookupError(f"tugas dengan id {tugas_id} tidak ditemukan")
