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

export const notificationErrors = {
    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,
        }),

    getNotificationsFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Failed to fetch notifications",
            description: "Please try again later",
            detail,
        }),

    markAsReadFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Failed to mark notifications as read",
            description: "Please try again later",
            detail,
        }),

    markAsUnreadFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Failed to mark notifications as unread",
            description: "Please try again later",
            detail,
        }),

    archiveFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Failed to archive notifications",
            description: "Please try again later",
            detail,
        }),

    unarchiveFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Failed to unarchive notifications",
            description: "Please try again later",
            detail,
        }),

    deleteNotificationsFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Failed to delete notifications",
            description: "Please try again later",
            detail,
        }),

    getUnreadCountFailed: (fctx: FlowExecCtx, detail: string): Err =>
        getError({
            flowId: fctx.flowId,
            code: ERROR_CODES.DATABASE_ERROR,
            message: "Failed to get unread count",
            description: "Please try again later",
            detail,
        }),
};

