import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

/**
 * 零部件 2511 BOM 分组种子数据
 */
export async function seedPartGroups() {
  console.log('🌱 Seeding Part Groups...');

  // 创建 "零部件 2511" 分组
  const bom2511Group = await prisma.partGroup.upsert({
    where: { name: '零部件 2511' },
    update: {},
    create: {
      name: '零部件 2511',
      description: 'BOM 2511 结构化零部件分组，包含完整的汽车零部件属性',
      displayOrder: 1,
      isActive: true,
      partsCount: 0,
      fieldsCount: 27,
    },
  });

  console.log(`  ✅ Created group: ${bom2511Group.name} (${bom2511Group.id})`);

  // BOM 2511 自定义字段定义
  const bom2511Fields = [
    // BOM 结构字段
    {
      key: 'level',
      name: '层级',
      nameEn: 'Level',
      type: 'NUMBER',
      description: '0、1、2为功能层；3、4为发运级别 (Level: 0, 1, 2 are functional levels; 3, 4 are shipping levels)',
      displayOrder: 1,
    },
    {
      key: 'parentPartNumber',
      name: '父零件号',
      nameEn: 'Parent Part Number',
      type: 'TEXT',
      description: 'Parent Part Number',
      displayOrder: 2,
    },
    {
      key: 'erpLineNumber',
      name: 'ERP行号',
      nameEn: 'ERP Line Number',
      type: 'TEXT',
      description: 'ERP Line Number',
      displayOrder: 3,
    },
    {
      key: 'bomLineNumber',
      name: 'BOM行号',
      nameEn: 'BOM Line Number',
      type: 'TEXT',
      description: 'BOM Line Number',
      displayOrder: 4,
    },
    
    // 颜色变体字段
    {
      key: 'colorVariant1',
      name: '墨玉黑-N1黑',
      nameEn: 'Obsidian Black-N1 Black',
      type: 'TEXT',
      description: '颜色变体 1 (Color Variant 1)',
      displayOrder: 5,
    },
    {
      key: 'colorVariant2',
      name: '棕米-C15灰',
      nameEn: 'Brown Rice-C15 Gray',
      type: 'TEXT',
      description: '颜色变体 2 (Color Variant 2)',
      displayOrder: 6,
    },
    {
      key: 'colorVariant3',
      name: '黑棕-A-N1黑',
      nameEn: 'Black Brown-A-N1 Black',
      type: 'TEXT',
      description: '颜色变体 3 (Color Variant 3)',
      displayOrder: 7,
    },
    {
      key: 'colorVariant4',
      name: '墨玉黑-90D白',
      nameEn: 'Obsidian Black-90D White',
      type: 'TEXT',
      description: '颜色变体 4 (Color Variant 4)',
      displayOrder: 8,
    },
    {
      key: 'colorVariant5',
      name: '墨玉黑-40P绿',
      nameEn: 'Obsidian Black-40P Green',
      type: 'TEXT',
      description: '颜色变体 5 (Color Variant 5)',
      displayOrder: 9,
    },
    {
      key: 'colorVariant6',
      name: '黑棕-A-C15灰',
      nameEn: 'Black Brown-A-C15 Gray',
      type: 'TEXT',
      description: '颜色变体 6 (Color Variant 6)',
      displayOrder: 10,
    },
    
    // 物流和使用字段
    {
      key: 'isShipping',
      name: '是否发运',
      nameEn: 'Is Shipping',
      type: 'BOOLEAN',
      description: 'Is Shipping',
      displayOrder: 11,
    },
    {
      key: 'quantity',
      name: '用量',
      nameEn: 'Quantity',
      type: 'NUMBER',
      required: true,
      description: 'Quantity (Required)',
      displayOrder: 12,
    },
    {
      key: 'usageRuleDescription',
      name: '使用规则描述',
      nameEn: 'Usage Rule Description',
      type: 'TEXTAREA',
      description: 'Usage Rule Description',
      displayOrder: 13,
    },
    
    // 零件属性字段
    {
      key: 'partType',
      name: '零件类型',
      nameEn: 'Part Type',
      type: 'TEXT',
      description: 'Part Type',
      displayOrder: 14,
    },
    {
      key: 'material',
      name: '材料',
      nameEn: 'Material',
      type: 'TEXT',
      description: 'Material',
      displayOrder: 15,
    },
    
    // 装配和紧固字段
    {
      key: 'torqueRequired',
      name: '是否有力矩要求',
      nameEn: 'Torque Required',
      type: 'BOOLEAN',
      description: 'Torque Required',
      displayOrder: 16,
    },
    {
      key: 'fasteningMethod',
      name: '紧固形式',
      nameEn: 'Fastening Method',
      type: 'TEXT',
      description: 'Fastening Method',
      displayOrder: 17,
    },
    {
      key: 'surfaceAdhesive',
      name: '表面涂胶',
      nameEn: 'Surface Adhesive Application',
      type: 'TEXT',
      description: 'Surface Adhesive Application',
      displayOrder: 18,
    },
    {
      key: 'tighteningTorque',
      name: '拧紧扭矩(Nm)',
      nameEn: 'Tightening Torque (Nm)',
      type: 'DECIMAL',
      description: 'Tightening Torque (Nm)',
      displayOrder: 19,
    },
    {
      key: 'connectionDescription',
      name: '链接部位描述',
      nameEn: 'Connection Description',
      type: 'TEXTAREA',
      description: 'Connection Description',
      displayOrder: 20,
    },
    
    // 合规性字段
    {
      key: 'is3CPart',
      name: '是否3C件',
      nameEn: 'Is 3C Part',
      type: 'BOOLEAN',
      description: 'Is 3C Part',
      displayOrder: 21,
    },
    {
      key: 'isCertificationPart',
      name: '是否公告件',
      nameEn: 'Is Certification Part',
      type: 'BOOLEAN',
      description: 'Is Certification Part',
      displayOrder: 22,
    },
    {
      key: 'isRegulatoryPart',
      name: '是否法规件',
      nameEn: 'Is Regulatory Part',
      type: 'BOOLEAN',
      description: 'Is Regulatory Part',
      displayOrder: 23,
    },
    {
      key: 'traceability',
      name: '可追溯性',
      nameEn: 'Traceability',
      type: 'SELECT',
      description: 'Traceability',
      options: ['必须追溯', '建议追溯', '不需要追溯'],
      displayOrder: 24,
    },
    
    // 生产线字段
    {
      key: 'assemblyStation',
      name: '线体_装配工位_左右侧',
      nameEn: 'Production Line_Assembly Station_Left/Right Side',
      type: 'TEXT',
      description: '格式: TR1_001_L (Production Line_Assembly Station_Left/Right Side, e.g.: TR1_001_L)',
      placeholder: 'TR1_001_L',
      displayOrder: 25,
    },
  ];

  // 批量创建自定义字段
  for (const fieldDef of bom2511Fields) {
    const field = await prisma.groupCustomField.upsert({
      where: {
        groupId_key: {
          groupId: bom2511Group.id,
          key: fieldDef.key,
        },
      },
      update: {},
      create: {
        groupId: bom2511Group.id,
        key: fieldDef.key,
        nameEn: fieldDef.nameEn,  // 英文名称（必填）
        nameCn: fieldDef.name,  // 中文名称（从 name 字段获取）
        type: fieldDef.type as any,
        required: fieldDef.required || false,
        visible: true,
        editable: true,
        searchable: true,
        options: fieldDef.options || undefined,
        description: fieldDef.description,
        placeholder: fieldDef.placeholder || null,
        displayOrder: fieldDef.displayOrder,
      },
    });

    console.log(`    ✅ Created field: ${field.nameEn} (${field.key})`);
  }

  // 创建其他示例分组
  const electronicGroup = await prisma.partGroup.upsert({
    where: { name: '电子元器件' },
    update: {},
    create: {
      name: '电子元器件',
      description: '电子元器件分组，包含电阻、电容等电子零件',
      displayOrder: 2,
      isActive: true,
      partsCount: 0,
      fieldsCount: 3,
    },
  });

  const electronicFields = [
    {
      key: 'resistance',
      name: '阻值',
      nameEn: 'Resistance',
      type: 'TEXT',
      description: '电阻值 (例如: 10kΩ)',
      placeholder: '10kΩ',
      displayOrder: 1,
    },
    {
      key: 'voltage',
      name: '额定电压',
      nameEn: 'Rated Voltage',
      type: 'TEXT',
      description: '额定电压 (例如: 5V, 12V)',
      placeholder: '5V',
      displayOrder: 2,
    },
    {
      key: 'tolerance',
      name: '容差',
      nameEn: 'Tolerance',
      type: 'TEXT',
      description: '容差 (例如: ±5%)',
      placeholder: '±5%',
      displayOrder: 3,
    },
  ];

  for (const fieldDef of electronicFields) {
    await prisma.groupCustomField.upsert({
      where: {
        groupId_key: {
          groupId: electronicGroup.id,
          key: fieldDef.key,
        },
      },
      update: {},
      create: {
        groupId: electronicGroup.id,
        key: fieldDef.key,
        nameEn: fieldDef.nameEn,  // 英文名称（必填）
        nameCn: fieldDef.name,  // 中文名称（从 name 字段获取）
        type: fieldDef.type as any,
        required: false,
        visible: true,
        editable: true,
        searchable: true,
        description: fieldDef.description,
        placeholder: fieldDef.placeholder,
        displayOrder: fieldDef.displayOrder,
      },
    });
  }

  console.log(`  ✅ Created group: ${electronicGroup.name} (${electronicGroup.id})`);

  // 创建"通用分组"（替代旧的直接字段）
  const commonGroup = await prisma.partGroup.upsert({
    where: { name: '通用信息' },
    update: {},
    create: {
      name: '通用信息',
      description: '所有零件的通用业务信息（分类、供应商、价格等）',
      displayOrder: 10,
      isActive: true,
      partsCount: 0,
      fieldsCount: 6,
    },
  });

  const commonFields = [
    {
      key: 'category',
      name: '分类',
      nameEn: 'Category',
      type: 'TEXT',
      description: '零件分类',
      displayOrder: 1,
    },
    {
      key: 'supplier',
      name: '供应商',
      nameEn: 'Supplier',
      type: 'TEXT',
      description: '供应商名称',
      displayOrder: 2,
    },
    {
      key: 'supplierPartNumber',
      name: '供应商零件号',
      nameEn: 'Supplier Part Number',
      type: 'TEXT',
      description: '供应商提供的零件编号',
      displayOrder: 3,
    },
    {
      key: 'leadTime',
      name: '交货期',
      nameEn: 'Lead Time',
      type: 'NUMBER',
      description: '交货期（天）',
      displayOrder: 4,
    },
    {
      key: 'unitPrice',
      name: '单价',
      nameEn: 'Unit Price',
      type: 'DECIMAL',
      description: '零件单价',
      displayOrder: 5,
    },
    {
      key: 'currency',
      name: '货币',
      nameEn: 'Currency',
      type: 'SELECT',
      description: '价格货币单位',
      options: ['CNY', 'USD', 'EUR', 'JPY'],
      displayOrder: 6,
    },
  ];

  for (const fieldDef of commonFields) {
    await prisma.groupCustomField.upsert({
      where: {
        groupId_key: {
          groupId: commonGroup.id,
          key: fieldDef.key,
        },
      },
      update: {},
      create: {
        groupId: commonGroup.id,
        key: fieldDef.key,
        nameEn: fieldDef.nameEn,  // 英文名称（必填）
        nameCn: fieldDef.name,  // 中文名称（从 name 字段获取）
        type: fieldDef.type as any,
        required: false,
        visible: true,
        editable: true,
        searchable: true,
        options: fieldDef.options || undefined,
        description: fieldDef.description,
        displayOrder: fieldDef.displayOrder,
      },
    });
  }

  console.log(`  ✅ Created group: ${commonGroup.name} (${commonGroup.id})`);

  console.log('✅ Part Groups seeding completed!');
  console.log(`
📊 Summary:
  - 零部件 2511: 27 fields
  - 电子元器件: 3 fields
  - 通用信息: 6 fields
  `);
}

// 如果直接运行此文件
if (require.main === module) {
  seedPartGroups()
    .then(() => {
      console.log('✅ Seed completed successfully');
      process.exit(0);
    })
    .catch((error) => {
      console.error('❌ Seed failed:', error);
      process.exit(1);
    })
    .finally(async () => {
      await prisma.$disconnect();
    });
}

