import express from "express"

import { getList, getOne, create, update, complete, remove } from "../services/tasks.js"

const router = express.Router()

router.get("/", async function (_req, res, next) {
	try {
		res.json(await getList())
	} catch (err) {
		console.error(`Error while getting tasks `, err instanceof Error ? err.message : String(err))
		next(err)
	}
})

router.get("/:id", async function (req, res, next) {
	try {
		res.json(await getOne(req.params.id))
	} catch (err) {
		console.error(`Error while getting a specific task `, err instanceof Error ? err.message : String(err))
		next(err)
	}
})

router.post("/", async function (req, res, next) {
	try {
		res.json(await create(req.body))
	} catch (err) {
		console.error(`Error while creating task`, err instanceof Error ? err.message : String(err))
		next(err)
	}
})

router.put("/:id", async function (req, res, next) {
	try {
		res.json(await update(req.params.id, req.body))
	} catch (err) {
		console.error(`Error while updating task`, err instanceof Error ? err.message : String(err))
		next(err)
	}
})

router.put("/:id/complete", async function (req, res, next) {
	try {
		res.json(await complete(req.params.id))
	} catch (err) {
		console.error(`Error while completing task`, err instanceof Error ? err.message : String(err))
		next(err)
	}
})

router.delete("/:id", async function (req, res, next) {
	try {
		res.json(await remove(req.params.id))
	} catch (err) {
		console.error(`Error while deleting task`, err instanceof Error ? err.message : String(err))
		next(err)
	}
})

export default router
