import type { Ref } from 'vue';

import type { ProductSpecDto } from '#/api/product';

/**
 * 文件职责：规格做法模板卡片动作。
 * 1. 处理模板删除。
 * 2. 处理模板复制。
 */
import { message, Modal } from 'ant-design-vue';

import { copyProductSpecApi, deleteProductSpecApi } from '#/api/product';

interface CreateTemplateActionsOptions {
  loadSpecs: () => Promise<void>;
  selectedStoreId: Ref<string>;
}

export function createTemplateActions(options: CreateTemplateActionsOptions) {
  function removeTemplate(item: ProductSpecDto) {
    if (!options.selectedStoreId.value) return;
    Modal.confirm({
      title: `确认删除模板「${item.name}」吗？`,
      content: '删除后将移除该模板及其选项。',
      okText: '确认删除',
      cancelText: '取消',
      async onOk() {
        await deleteProductSpecApi({
          storeId: options.selectedStoreId.value,
          specId: item.id,
        });
        message.success('模板已删除');
        await options.loadSpecs();
      },
    });
  }

  async function copyTemplate(item: ProductSpecDto) {
    if (!options.selectedStoreId.value) return;
    try {
      await copyProductSpecApi({
        storeId: options.selectedStoreId.value,
        specId: item.id,
      });
      message.success('模板复制成功');
      await options.loadSpecs();
    } catch (error) {
      console.error(error);
    }
  }

  return {
    copyTemplate,
    removeTemplate,
  };
}
