package main

import (
	"log"
	"verification-platform-backend/internal/database"
	"verification-platform-backend/internal/model"
)

func main() {
	database.Init()

	var doc model.Doc
	if err := database.DB.Where("slug = ?", "api-get-dynamic-code").First(&doc).Error; err != nil {
		log.Printf("未找到文档: %v", err)
		return
	}

	newContent := `# 获取动态代码接口

**注意**：动态代码接口需要用户登录认证，需要在请求头中携带JWT token：
Authorization: Bearer {token}

### 接口地址
GET /api/v1/app/:appKey/dynamic-code

### 请求头
Authorization: Bearer {token}

### 路径参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| appKey | string | 是 | 应用密钥 |

### 响应示例
{
  "code": 200,
  "message": "操作成功",
  "data": [
    {
      "id": 1,
      "name": "加法函数",
      "key": "add",
      "description": "实现数字加法运算",
      "status": "active",
      "created_at": "2024-01-01T00:00:00Z"
    }
  ]
}

### 字段说明
- id: 动态代码ID
- name: 动态代码名称
- key: 动态代码唯一标识
- description: 描述
- status: 状态（active、inactive）

---

## 执行动态代码接口

### 接口地址
POST /api/v1/app/:appKey/dynamic-code/:key/execute

### 请求头
Authorization: Bearer {token}
Content-Type: application/json

### 路径参数
| 参数名 | 类型 | 必填 | 说明 |
|--------|------|------|------|
| appKey | string | 是 | 应用密钥 |
| key | string | 是 | 动态代码标识 |

### 请求体
{
  "params": {
    "param1": "value1",
    "param2": "value2"
  }
}

### 参数说明
- params: 参数对象，键值对形式传递，键名即为JavaScript变量名

### 响应示例
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "result": "执行结果",
    "execution_time": 1
  }
}

### 字段说明
- result: 代码执行结果
- execution_time: 执行时间（毫秒）

---

## JavaScript代码编写规范

### 1. 参数使用

动态代码可以直接使用请求参数中传递的变量，无需额外定义：

a + b

请求参数：{"params": {"a": 10, "b": 20}}
返回结果：30

### 2. 函数定义与调用

可以定义函数并在最后一行调用：

function calculate(x, y) {
    return Math.sqrt(x * x + y * y);
}

calculate(x, y)

请求参数：{"params": {"x": 3, "y": 4}}
返回结果：5

### 3. 复杂逻辑

支持完整的JavaScript语法，包括控制流、循环、对象操作等：

function processScore(score) {
    if (score >= 90) {
        return "优秀";
    } else if (score >= 60) {
        return "及格";
    } else {
        return "不及格";
    }
}

processScore(score)

### 4. 返回值规则

- **最后一个表达式的值即为返回值**
- **不要在全局作用域使用return语句**
- 可以返回任意类型：数字、字符串、布尔值、对象、数组等

### 5. 常见示例

#### 简单计算
price * quantity

#### 字符串拼接
name + "的年龄是" + age + "岁"

#### 条件判断
score >= 60 ? "及格" : "不及格"

#### 对象返回
{
    sum: a + b,
    product: a * b,
    difference: a - b
}

#### 数组操作
function sumArray(numbers) {
    let total = 0;
    for (let i = 0; i < numbers.length; i++) {
        total += numbers[i];
    }
    return total;
}

sumArray([1, 2, 3, 4, 5])

### 6. 注意事项

1. **全局作用域不能使用return**：return只能在函数内部使用
2. **参数变量直接使用**：无需重新定义
3. **最后一行是返回值**：确保最后一行是需要返回的表达式
4. **支持ES6语法**：可以使用let、const、箭头函数等
5. **内置对象可用**：Math、Date、JSON等JavaScript内置对象都可以使用

---

## 错误处理

### 常见错误

#### 1. 语法错误
{
  "code": 400,
  "message": "代码执行错误: SyntaxError: Unexpected token"
}

#### 2. 运行时错误
{
  "code": 400,
  "message": "代码执行错误: ReferenceError: x is not defined"
}

#### 3. 全局return错误
{
  "code": 400,
  "message": "代码执行错误: SyntaxError: Illegal return statement"
}

---

## 完整示例

### 示例1：计算折扣价格

**请求**：
POST /api/v1/app/your-app-key/dynamic-code/calculate-discount/execute
{
  "params": {
    "price": 100,
    "discount": 20,
    "tax": 10
  }
}

**动态代码**：
function calculateFinalPrice(price, discount, tax) {
    const subtotal = price;
    const discountAmount = subtotal * (discount / 100);
    const afterDiscount = subtotal - discountAmount;
    const taxAmount = afterDiscount * (tax / 100);
    return afterDiscount + taxAmount;
}

calculateFinalPrice(price, discount, tax)

**响应**：
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "result": 88,
    "execution_time": 1
  }
}

### 示例2：用户信息格式化

**请求**：
POST /api/v1/app/your-app-key/dynamic-code/format-user/execute
{
  "params": {
    "name": "张三",
    "age": 25,
    "city": "北京"
  }
}

**动态代码**：
function formatUserInfo(name, age, city) {
    const greeting = "你好";
    return greeting + "，我是" + name + "，今年" + age + "岁，来自" + city;
}

formatUserInfo(name, age, city)

**响应**：
{
  "code": 200,
  "message": "操作成功",
  "data": {
    "result": "你好，我是张三，今年25岁，来自北京",
    "execution_time": 1
  }
}

---

## 性能建议

1. **避免死循环**：确保循环有明确的退出条件
2. **合理使用缓存**：对于重复计算，可以考虑缓存结果
3. **控制代码复杂度**：过复杂的代码可能影响执行效率
4. **使用内置函数**：优先使用JavaScript内置函数，性能更好

---

## 安全建议

1. **不要执行危险操作**：避免访问文件系统、网络请求等
2. **参数验证**：在代码中对参数进行必要的验证
3. **避免敏感信息**：不要在代码中硬编码密钥、密码等敏感信息
4. **限制执行时间**：设置合理的超时时间，防止长时间运行
`

	doc.Content = newContent

	if err := database.DB.Save(&doc).Error; err != nil {
		log.Printf("更新文档失败: %v", err)
		return
	}

	log.Println("动态代码文档更新成功")
}
