import { z } from 'zod'
import { zodTextFormat } from 'openai/helpers/zod'
import type { Express } from 'express'

import { addTag } from '../utils'

import type { OpenAI } from 'openai'

export const registerBasicRoutes = (app: Express, client: OpenAI) => {
  // 润色标题和内容
  app.post('/api/polish-title', async (req, res) => {
    const { title, content } = req.body

    const InputSchema = z.object({
      title: z.string(),
      content: z.string(),
    })

    const response = await client.responses.create({
      model: 'gpt-5-mini',
      input: [
        {
          role: 'user',
          content: `你是一个企业文化内容编辑专家，请遵循以下规则：

1. 标题要更有传播性，但不能夸张
2. 内容要更通顺、有感染力
3. 保留原意，不要编造

输入：
标题：${title}
内容：${content}`,
        },
      ],
      text: {
        format: zodTextFormat(InputSchema, 'Input'),
      },
    })

    const data = InputSchema.parse(JSON.parse(response.output_text))

    res.json({
      message: 'AI润色标题和内容成功',
      data,
    })
  })

  // ai生成标签（默认 3 条）
  app.post('/api/generate-tags', async (_req, res) => {
    const Schema = z.object({
      tags: z
        .array(
          z.object({
            color: z.string().default('#000000'),
            description: z.string(),
            title: z.string(),
            type: z.literal('culture'),
          }),
        )
        .length(3),
    })

    const response = await client.responses.create({
      model: 'gpt-5-mini',
      input: [
        {
          role: 'user',
          content: '请生成3条标签，关于企业文化相关的标签',
        },
      ],
      text: {
        format: zodTextFormat(Schema, 'Input'),
      },
    })

    const tags = Schema.parse(JSON.parse(response.output_text)).tags

    // 调用后端接口
    await Promise.all(tags.map((tag) => addTag(tag)))

    res.json({ message: 'AI生成标签成功', data: tags })
  })

  // 根据标题和内容 帮我选取标签
  app.post('/api/select-tags-by-ai', async (req, res) => {
    const { title, content, tagList } = req.body
    const Schema = z.object({
      mainTagId: z.string(),
      subTagIdList: z.array(z.number()).max(3).min(0),
    })

    const response = await client.responses.create({
      model: 'gpt-5-mini',
      input: [
        {
          role: 'user',
          content: `根据用户给出的标题：${title}和内容：${content}，以及用户给出的标签列表：${JSON.stringify(
            tagList,
          )}，请根据标题和内容 帮我选取主、副标签，并返回对应的格式`,
        },
      ],
      text: {
        format: zodTextFormat(Schema, 'Input'),
      },
    })

    const data = Schema.parse(JSON.parse(response.output_text))

    res.json({ message: 'AI选取标签成功', data })
  })

  // ai生成评论
  app.post('/api/generate-comment', async (req, res) => {
    const { content } = req.body

    const Schema = z.object({ content: z.string() })

    const response = await client.responses.create({
      model: 'gpt-5-mini',
      input: [
        {
          role: 'user',
          content: `你是一个评论专家
请遵循以下规则：
1. 评论要更通顺、有感染力
2. 保留原意，不要编造
3. 评论要更符合用户给出的内容

输入：
内容：${content}`,
        },
      ],
      text: {
        format: zodTextFormat(Schema, 'Input'),
      },
    })

    const data = Schema.parse(JSON.parse(response.output_text))

    res.json({ message: 'AI生成评论成功', data: data.content })
  })
}
