/**
 * ============================================================
 *  金山多维表格 AirScript 一键建表脚本
 * ============================================================
 *
 *  📌 使用方法:
 *     1. 打开你的金山多维表格文档
 *     2. 点击顶部菜单「效率」→「AirScript 脚本编辑器」
 *     3. 新建脚本，将本文件的全部内容粘贴进去
 *     4. 点击「运行」按钮
 *
 *  📌 无需任何额外配置:
 *     - 不需要申请企业应用
 *     - 不需要 APP_ID / APP_SECRET
 *     - 不需要安装 Node.js
 *     - 直接在多维表格界面中运行即可
 *
 *  📌 参考文档:
 *     - claude-dds.md  (7张表的完善字段设计)
 *     - gemini-dds.md  (核心锚表架构设计)
 *     - AirScript 文档: https://airsheet.wps.cn/docs/api/dbsheet/Sheet.html
 *
 *  📌 脚本执行流程:
 *     Phase 1: 创建 7 张空表(含基础字段) → 获取所有 SheetId
 *     Phase 2: 使用 SheetId 创建关联字段(Link) → 自动建立表间关系
 *     Phase 3: 输出执行报告 + 提醒人工配置项
 */

// ============================================================
//  Phase 1: 创建所有数据表
// ============================================================

console.log("╔══════════════════════════════════════════════════════╗");
console.log("║  项目部署管理系统 — AirScript 一键建表              ║");
console.log("╚══════════════════════════════════════════════════════╝\n");

// ---- 表1: 项目基本信息表 ----
console.log("📋 [1/7] 创建: 项目基本信息表...");
var sheet1 = Application.Sheet.CreateSheet({
  Name: '项目基本信息表',
  Views: [{ name: '默认视图', type: 'Grid' }],
  Fields: [
    { name: '项目名称', type: 'MultiLineText' },
    { name: '行业组接口人', type: 'MultiLineText' },
    { name: '行业组接口人电话', type: 'Phone' },
    {
      name: '省份', type: 'SingleSelect',
      items: [
        { value: '北京' }, { value: '天津' }, { value: '河北' },
        { value: '山西' }, { value: '内蒙古' }, { value: '辽宁' },
        { value: '吉林' }, { value: '黑龙江' }, { value: '上海' },
        { value: '江苏' }, { value: '浙江' }, { value: '安徽' },
        { value: '福建' }, { value: '江西' }, { value: '山东' },
        { value: '河南' }, { value: '湖北' }, { value: '湖南' },
        { value: '广东' }, { value: '广西' }, { value: '海南' },
        { value: '重庆' }, { value: '四川' }, { value: '贵州' },
        { value: '云南' }, { value: '西藏' }, { value: '陕西' },
        { value: '甘肃' }, { value: '青海' }, { value: '宁夏' },
        { value: '新疆' }
      ]
    },
    { name: '城市', type: 'MultiLineText' },
    {
      name: '项目类型', type: 'SingleSelect',
      items: [
        { value: '新部署' }, { value: '升级' },
        { value: '迁移' }, { value: '扩容' }
      ]
    },
    {
      name: '部署优先级', type: 'SingleSelect',
      items: [
        { value: 'P0-紧急' }, { value: 'P1-高' },
        { value: 'P2-中' }, { value: 'P3-低' }
      ]
    },
    { name: '部署飞服平台', type: 'Checkbox' },
    { name: '飞服平台版本', type: 'MultiLineText' },
    { name: '部署监管平台', type: 'Checkbox' },
    { name: '监管平台版本', type: 'MultiLineText' },
    { name: '期望部署日期', type: 'Date' },
    { name: '部署必要条件说明', type: 'MultiLineText' },
    {
      name: '必要条件是否满足', type: 'SingleSelect',
      items: [
        { value: '是' }, { value: '否' }, { value: '部分满足' }
      ]
    },
    { name: '条件不满足说明', type: 'MultiLineText' },
    { name: '部署资源信息', type: 'Attachment' },
    { name: '特殊要求备注', type: 'MultiLineText' }
  ]
});
var sheetId1 = sheet1.id;
console.log("✅ 项目基本信息表 创建成功, SheetId = " + sheetId1);


// ---- 表2: 项目本地化部署升级信息表 ----
console.log("\n📋 [2/7] 创建: 项目本地化部署升级信息表...");
var sheet2 = Application.Sheet.CreateSheet({
  Name: '项目本地化部署升级信息表',
  Views: [{ name: '默认视图', type: 'Grid' }],
  Fields: [
    // 项目名称字段先用文本，Phase 2 阶段替换为 Link
    { name: '项目名称(待关联)', type: 'MultiLineText' },
    {
      name: '升级类型', type: 'SingleSelect',
      items: [
        { value: '全量升级' }, { value: '增量升级' },
        { value: '热修复' }, { value: '回滚' }
      ]
    },
    { name: '当前版本（飞服）', type: 'MultiLineText' },
    { name: '目标版本（飞服）', type: 'MultiLineText' },
    { name: '当前版本（监管）', type: 'MultiLineText' },
    { name: '目标版本（监管）', type: 'MultiLineText' },
    { name: '升级影响评估', type: 'MultiLineText' },
    { name: '回滚方案', type: 'MultiLineText' },
    { name: '期望升级开始时间', type: 'Date' },
    { name: '期望升级结束时间', type: 'Date' },
    { name: '部署资源信息', type: 'Attachment' }
  ]
});
var sheetId2 = sheet2.id;
console.log("✅ 升级信息表 创建成功, SheetId = " + sheetId2);


// ---- 表3: 项目本地化部署状态表 (核心锚表) ----
console.log("\n📋 [3/7] 创建: 项目本地化部署状态表 (核心锚表)...");
var sheet3 = Application.Sheet.CreateSheet({
  Name: '项目本地化部署状态表',
  Views: [{ name: '全部部署列表', type: 'Grid' }],
  Fields: [
    { name: '部署编号', type: 'AutoNumber' },
    {
      name: '来源类型', type: 'SingleSelect',
      items: [
        { value: '首次部署' }, { value: '升级部署' }
      ]
    },
    // 关联项目 / 关联升级记录 → Phase 2 创建 Link 字段
    {
      name: '部署状态', type: 'SingleSelect',
      items: [
        { value: '待排期' }, { value: '已排期' },
        { value: '环境准备中' }, { value: '部署中' },
        { value: '验证中' }, { value: '已完成' },
        { value: '部署异常' }, { value: '已暂停' },
        { value: '已取消' }
      ]
    },
    {
      name: '部署结果', type: 'SingleSelect',
      items: [
        { value: '成功' }, { value: '失败' }, { value: '部分成功' }
      ]
    },
    {
      name: '部署优先级', type: 'SingleSelect',
      items: [
        { value: 'P0-紧急' }, { value: 'P1-高' },
        { value: 'P2-中' }, { value: 'P3-低' }
      ]
    },
    { name: '当前进度/卡点说明', type: 'MultiLineText' },
    { name: '计划开始时间', type: 'Date' },
    { name: '计划结束时间', type: 'Date' },
    { name: '实际开始时间', type: 'Date' },
    { name: '实际结束时间', type: 'Date' },
    { name: '命名空间', type: 'MultiLineText' },
    { name: '部署负责人', type: 'Contact', multipleContacts: false, noticeNewContact: false },
    { name: '部署人电话', type: 'Phone' },
    { name: '备注', type: 'MultiLineText' }
  ]
});
var sheetId3 = sheet3.id;
console.log("✅ 部署状态表 创建成功, SheetId = " + sheetId3);


// ---- 表4: 项目部署环境信息表 ----
console.log("\n📋 [4/7] 创建: 项目部署环境信息表...");
var sheet4 = Application.Sheet.CreateSheet({
  Name: '项目部署环境信息表',
  Views: [{ name: '默认视图', type: 'Grid' }],
  Fields: [
    // 所属部署 → Phase 2 创建 Link 字段
    { name: '公网IP', type: 'MultiLineText' },
    { name: '能否访问公网', type: 'Checkbox' },
    { name: '内网IP', type: 'MultiLineText' },
    { name: 'SSH端口', type: 'Number' },
    { name: 'SSH用户名', type: 'MultiLineText' },
    {
      name: '密码存储方式', type: 'SingleSelect',
      items: [
        { value: '密码管理器' }, { value: '加密文档' }, { value: '其他' }
      ]
    },
    {
      name: '主机功能', type: 'SingleSelect',
      items: [
        { value: 'master' }, { value: 'worker' },
        { value: 'storage' }, { value: 'doris' }
      ]
    },
    {
      name: 'CPU架构', type: 'SingleSelect',
      items: [{ value: 'amd64' }, { value: 'arm64' }]
    },
    {
      name: '主机状态', type: 'SingleSelect',
      items: [
        { value: '待交付' }, { value: '已交付' },
        { value: '已初始化' }, { value: '运行中' }, { value: '异常' }
      ]
    },
    {
      name: '操作系统', type: 'SingleSelect',
      items: [
        { value: 'CentOS 7' }, { value: 'CentOS 8' },
        { value: 'Ubuntu 20.04' }, { value: 'Ubuntu 22.04' },
        { value: '其他' }
      ]
    },
    { name: 'CPU核心数', type: 'Number' },
    { name: 'CPU型号', type: 'MultiLineText' },
    { name: '内存大小(GB)', type: 'Number' },
    { name: '系统盘大小(GB)', type: 'Number' },
    { name: '数据盘大小(GB)', type: 'Number' },
    { name: 'GPU信息', type: 'MultiLineText' },
    { name: '备注信息', type: 'MultiLineText' }
  ]
});
var sheetId4 = sheet4.id;
console.log("✅ 环境信息表 创建成功, SheetId = " + sheetId4);


// ---- 表5: 项目部署网络信息表 ----
console.log("\n📋 [5/7] 创建: 项目部署网络信息表...");
var sheet5 = Application.Sheet.CreateSheet({
  Name: '项目部署网络信息表',
  Views: [{ name: '默认视图', type: 'Grid' }],
  Fields: [
    // 所属部署 → Phase 2 创建 Link 字段
    { name: '访问地址', type: 'Url' },
    { name: '是否开启SSL', type: 'Checkbox' },
    { name: '端口信息说明', type: 'MultiLineText' },
    {
      name: '网络环境', type: 'SingleSelect',
      items: [
        { value: '完全内网' }, { value: '单主机公网' }, { value: '全访问公网' }
      ]
    },
    {
      name: '主机管理方式', type: 'SingleSelect',
      items: [
        { value: '堡垒机' }, { value: '跳板机' },
        { value: '直接访问' }, { value: 'VPN' }
      ]
    },
    { name: '管理后台地址', type: 'Url' },
    { name: 'VPN下载地址', type: 'Url' },
    { name: 'VPN账号信息存储位置', type: 'MultiLineText' },
    { name: '备注', type: 'MultiLineText' }
  ]
});
var sheetId5 = sheet5.id;
console.log("✅ 网络信息表 创建成功, SheetId = " + sheetId5);


// ---- 表6: 项目部署中间件信息表 ----
console.log("\n📋 [6/7] 创建: 项目部署中间件信息表...");
var sheet6 = Application.Sheet.CreateSheet({
  Name: '项目部署中间件信息表',
  Views: [{ name: '默认视图', type: 'Grid' }],
  Fields: [
    // 所属部署 → Phase 2 创建 Link 字段
    {
      name: '中间件类型', type: 'SingleSelect',
      items: [
        { value: 'MySQL' }, { value: 'Redis' },
        { value: 'RabbitMQ' }, { value: 'EMQX' },
        { value: 'NACOS' }, { value: 'K8S Dashboard' },
        { value: 'MINIO' }
      ]
    },
    { name: '中间件版本', type: 'MultiLineText' },
    {
      name: '部署方式', type: 'SingleSelect',
      items: [
        { value: '容器化' }, { value: '主机部署' }, { value: '云服务' }
      ]
    },
    { name: '是否暴露公网', type: 'Checkbox' },
    { name: '公网端口', type: 'MultiLineText' },
    { name: '内网IP', type: 'MultiLineText' },
    { name: '内网端口', type: 'MultiLineText' },
    { name: '用户名', type: 'MultiLineText' },
    { name: '密码存储位置', type: 'MultiLineText' },
    { name: '管理后台地址', type: 'Url' }
  ]
});
var sheetId6 = sheet6.id;
console.log("✅ 中间件信息表 创建成功, SheetId = " + sheetId6);


// ---- 表7: 项目部署业务信息表 ----
console.log("\n📋 [7/7] 创建: 项目部署业务信息表...");
var sheet7 = Application.Sheet.CreateSheet({
  Name: '项目部署业务信息表',
  Views: [{ name: '默认视图', type: 'Grid' }],
  Fields: [
    // 所属部署 → Phase 2 创建 Link 字段
    { name: '微服务名称', type: 'MultiLineText' },
    { name: '微服务分支', type: 'MultiLineText' },
    { name: '微服务镜像', type: 'MultiLineText' },
    { name: '微服务版本', type: 'MultiLineText' },
    {
      name: '部署状态', type: 'SingleSelect',
      items: [
        { value: '待部署' }, { value: '部署中' },
        { value: '运行中' }, { value: '异常' }, { value: '已下线' }
      ]
    }
  ]
});
var sheetId7 = sheet7.id;
console.log("✅ 业务信息表 创建成功, SheetId = " + sheetId7);


// ============================================================
//  Phase 2: 创建关联字段 (Link)
// ============================================================

console.log("\n" + "=".repeat(60));
console.log("🔗 Phase 2: 建立表间关联关系...");
console.log("=".repeat(60));

// 升级信息表 → 关联 → 项目基本信息表
console.log("  🔗 升级信息表.关联项目 → 项目基本信息表");
Application.Field.CreateFields({
  SheetId: sheetId2,
  Fields: [
    { name: '关联项目', type: 'Link', linkSheet: sheetId1, multipleLinks: false }
  ]
});

// 部署状态表 → 关联 → 项目基本信息表
console.log("  🔗 部署状态表.关联项目 → 项目基本信息表");
Application.Field.CreateFields({
  SheetId: sheetId3,
  Fields: [
    { name: '关联项目', type: 'Link', linkSheet: sheetId1, multipleLinks: false }
  ]
});

// 部署状态表 → 关联 → 升级信息表
console.log("  🔗 部署状态表.关联升级记录 → 升级信息表");
Application.Field.CreateFields({
  SheetId: sheetId3,
  Fields: [
    { name: '关联升级记录', type: 'Link', linkSheet: sheetId2, multipleLinks: false }
  ]
});

// 环境信息表 → 关联 → 部署状态表
console.log("  🔗 环境信息表.所属部署 → 部署状态表");
Application.Field.CreateFields({
  SheetId: sheetId4,
  Fields: [
    { name: '所属部署', type: 'Link', linkSheet: sheetId3, multipleLinks: false }
  ]
});

// 网络信息表 → 关联 → 部署状态表
console.log("  🔗 网络信息表.所属部署 → 部署状态表");
Application.Field.CreateFields({
  SheetId: sheetId5,
  Fields: [
    { name: '所属部署', type: 'Link', linkSheet: sheetId3, multipleLinks: false }
  ]
});

// 中间件信息表 → 关联 → 部署状态表
console.log("  🔗 中间件信息表.所属部署 → 部署状态表");
Application.Field.CreateFields({
  SheetId: sheetId6,
  Fields: [
    { name: '所属部署', type: 'Link', linkSheet: sheetId3, multipleLinks: false }
  ]
});

// 业务信息表 → 关联 → 部署状态表
console.log("  🔗 业务信息表.所属部署 → 部署状态表");
Application.Field.CreateFields({
  SheetId: sheetId7,
  Fields: [
    { name: '所属部署', type: 'Link', linkSheet: sheetId3, multipleLinks: false }
  ]
});

console.log("\n✅ 所有关联字段创建完成!");


// ============================================================
//  Phase 3: 输出执行报告
// ============================================================

console.log("\n\n");
console.log("╔══════════════════════════════════════════════════════╗");
console.log("║                 📊 执行结果报告                      ║");
console.log("╚══════════════════════════════════════════════════════╝");

console.log("\n📋 已创建的数据表:");
console.log("  1. 项目基本信息表              (SheetId: " + sheetId1 + ")");
console.log("  2. 项目本地化部署升级信息表     (SheetId: " + sheetId2 + ")");
console.log("  3. 项目本地化部署状态表         (SheetId: " + sheetId3 + ")  ← 核心锚表");
console.log("  4. 项目部署环境信息表           (SheetId: " + sheetId4 + ")");
console.log("  5. 项目部署网络信息表           (SheetId: " + sheetId5 + ")");
console.log("  6. 项目部署中间件信息表         (SheetId: " + sheetId6 + ")");
console.log("  7. 项目部署业务信息表           (SheetId: " + sheetId7 + ")");

console.log("\n🔗 已建立的关联关系:");
console.log("  ✅ 升级信息表 → 项目基本信息表");
console.log("  ✅ 部署状态表 → 项目基本信息表");
console.log("  ✅ 部署状态表 → 升级信息表");
console.log("  ✅ 环境信息表 → 部署状态表");
console.log("  ✅ 网络信息表 → 部署状态表");
console.log("  ✅ 中间件信息表 → 部署状态表");
console.log("  ✅ 业务信息表 → 部署状态表");

console.log("\n\n");
console.log("╔══════════════════════════════════════════════════════╗");
console.log("║            🔧 人工操作清单 (还需要做)                ║");
console.log("╚══════════════════════════════════════════════════════╝");

console.log(`
以下操作需要在多维表格界面中手动完成:

🟡 P1 — 创建视图
  在「部署状态表」上创建:
  □ 甘特视图 → 开始=计划开始时间, 结束=计划结束时间
  □ 日历视图 → 日期=计划开始时间
  □ 看板视图 → 按「部署状态」分列
  □ 表单视图 → 行业组提交入口

🟡 P1 — 配置权限
  □ 行业组人员: 仅表单提交 + 只读查看状态
  □ 特战队: 读写核心表及子表
  □ 小组长: 全部读写

🟡 P1 — 配置自动化规则
  □ 新建项目 → 自动创建部署状态记录
  □ 新建升级 → 自动创建部署状态记录
  □ 状态→部署中 → 自动记录开始时间
  □ 状态→已完成 → 自动记录结束时间
  □ 状态→异常 → 发送通知

🟢 P2 — 创建仪表盘
  □ 部署状态分布饼图
  □ 本月任务数柱状图
  □ 统计卡片

🟢 P2 — 安全配置
  □ 敏感字段(IP等)设置字段级权限
  □ 密码不存入表格，仅记录存储位置
`);

console.log("🎉 脚本执行完成! 共创建 7 张表 + 7 个关联关系");
