import type { iTask } from "types/tasks.js"
import executeQuery from "../lib/db.js"

export async function getOne(taskID: string) {
	const rows = await executeQuery({
		query: `
			SELECT
				taskID,
				assignedUserID,
				description,
				createdDate,
				modifiedDate,
				dueDate,
				isCompleted,
				completedDate
			FROM
				tasks
			WHERE
				taskID=${taskID}
		`,
	})

	return rows[0]
}

export async function getList() {
	const rows = await executeQuery({
		query: `
			SELECT
				t.taskID,
				t.description,
				t.createdDate,
				t.dueDate,
				t.isCompleted,
				t.completedDate,
				t.assignedUserID,
				IFNULL(ua.username, '') as assignedUser,
				IFNULL(uc.username, '') as createdUser,
				IFNULL(um.username, '') as modifiedUser,
				t.modifiedDate
			FROM
				tasks t
			LEFT OUTER JOIN
				users ua ON t.assignedUserID = ua.userID
			LEFT OUTER JOIN
				users uc ON t.createdUserID = uc.userID
			LEFT OUTER JOIN
				users um ON t.modifiedUserID = um.userID
			ORDER BY
				t.isCompleted ASC
		`,
	})

	return rows
}

export async function create(task: iTask) {
	const sql = `
		INSERT INTO tasks (
			assignedUserID,
			description,
			dueDate
		) VALUES (
			${task.assignedUserID},
			'${task.description}',
			'${task.dueDate}'
		)
	`

	const rows = await executeQuery({ query: sql })

	let message = "Error in creating task"

	if (rows.affectedRows) {
		message = "Task created successfully"
	}

	return { message }
}

export async function update(id: string, task: iTask) {
	console.log("update task ID", id, "with payload:", task)

	const rows = await executeQuery({
		query: `
		UPDATE
			tasks
		SET
			assignedUserID = ${task.assignedUserID},
			description = '${task.description}',
			dueDate = '${task.dueDate}'
		WHERE
			taskID = ${id}
		`,
	})

	let message = "Error updating task"

	if (rows.affectedRows) {
		message = "Task updated successfully"
	}

	return { message }
}

export async function complete(id: string) {
	console.log("complete task ID", id)

	const rows = await executeQuery({
		query: `
			UPDATE
				tasks
			SET
				isCompleted=1
			WHERE
				taskID=${id}
		`,
	})

	let message = "Error completing task"

	if (rows.affectedRows) {
		message = "Task completed successfully"
	}

	return { message }
}

export async function remove(id: string) {
	console.log("delete task ID", id)

	const rows = await executeQuery({
		query: `DELETE FROM tasks WHERE taskID=${id}`,
	})

	let message = "Error in deleting task"

	if (rows.affectedRows) {
		message = "Task deleted successfully"
	}

	return { message }
}
