// ============================================================
// task-list-menu.ts — 任务列表行右键菜单定义
//
// 菜单结构：
//   打开输出目录 | 复制资源链接
//   重新编辑 | 再次生成 | 拉取结果 | 重新下载 | 收藏
//   ——
//   删除记录
// ============================================================

import type { ContextMenuItems } from '@/shared/components/ContextMenu';

export interface TaskListMenuOptions {
    /** 任务输出目录是否可用（仅 success 状态） */
    canOpenOutput: boolean;
    /** 是否可重新编辑 */
    canReedit: boolean;
    /** 是否可再次生成 */
    canRegen: boolean;
    /** 是否可拉取结果 */
    canPullResult: boolean;
    /** 是否可重新下载 */
    canRedownload: boolean;
    /** 是否已收藏 */
    isFavorited: boolean;

    onOpenOutputDir: () => void;
    onCopyResourceLink: () => void;
    onReedit: () => void;
    onRegen: () => void;
    onPullResult: () => void;
    onRedownload: () => void;
    onToggleFavorite: () => void;
    onDelete: () => void;
}

export function getTaskListMenuItems(opts: TaskListMenuOptions): ContextMenuItems {
    return [
        {
            key: 'open-output',
            label: '打开输出目录',
            onClick: opts.onOpenOutputDir,
            disabled: !opts.canOpenOutput,
        },
        {
            key: 'copy-link',
            label: '复制资源链接',
            onClick: opts.onCopyResourceLink,
        },
        {
            key: 'reedit',
            label: '重新编辑',
            onClick: opts.onReedit,
            disabled: !opts.canReedit,
        },
        {
            key: 'regen',
            label: '再次生成',
            onClick: opts.onRegen,
            disabled: !opts.canRegen,
        },
        {
            key: 'pull-result',
            label: '拉取结果',
            onClick: opts.onPullResult,
            disabled: !opts.canPullResult,
        },
        {
            key: 'redownload',
            label: '重新下载',
            onClick: opts.onRedownload,
            disabled: !opts.canRedownload,
        },
        {
            key: 'favorite',
            label: opts.isFavorited ? '取消收藏' : '收藏',
            onClick: opts.onToggleFavorite,
        },
        'divider',
        {
            key: 'delete',
            label: '删除记录',
            onClick: opts.onDelete,
            danger: true,
        },
    ];
}
