import { FlowExecCtx } from "@/core/flow.execution.context";
import { ERROR_CODES, type Err } from "@pkg/result";
import { getError } from "@pkg/logger";

export const taskErrors = {
    dbError: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Database operation failed",
            description: "Please try again later",
            detail,
        }),

    taskNotFound: (fctx: FlowExecCtx, taskId: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.NOT_FOUND,
            message: "Task not found",
            description: "The requested task does not exist",
            detail: `No task found with ID: ${taskId}`,
        }),

    createTaskFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "An error occurred while creating task",
            description: "Try again later",
            detail,
        }),

    getTaskFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "An error occurred while fetching task",
            description: "Try again later",
            detail,
        }),

    updateTaskFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "An error occurred while updating task",
            description: "Try again later",
            detail,
        }),

    deleteTaskFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "An error occurred while deleting task",
            description: "Try again later",
            detail,
        }),

    getTasksFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "An error occurred while fetching tasks",
            description: "Try again later",
            detail,
        }),

    getTasksByStatusFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "An error occurred while fetching tasks by status",
            description: "Try again later",
            detail,
        }),

    checkTaskExistenceFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "An error occurred while checking task existence",
            description: "Try again later",
            detail,
        }),
};

