import { z } from '@hono/zod-openapi';
import { FileSchema } from '@/server/modules/files/file.schema';
import { UserSchema } from '@/server/modules/users/user.schema';
import { DeleteStatus } from '@/share/types';

// 章节Schema
export const SolutionChapterSchema = z.object({
  id: z.number().int('必须是整数').positive('必须是正整数').openapi({
    description: '章节ID',
    example: 1
  }),
  chapterNumber: z.number().int('必须是整数').positive('必须是正整数').openapi({
    description: '章节编号',
    example: 1
  }),
  title: z.string().min(1, '章节标题不能为空').max(255, '章节标题最多255个字符').openapi({
    description: '章节标题',
    example: '项目概述'
  }),
  content: z.string().nullable().openapi({
    description: '章节内容',
    example: '本章节描述项目的基本情况和背景...'
  }),
  originalContent: z.string().nullable().openapi({
    description: '原始内容',
    example: '原始的项目概述内容...'
  }),
  modificationInstructions: z.string().nullable().openapi({
    description: '修改说明',
    example: '需要增加项目目标和预期成果的描述'
  }),
  file: FileSchema.nullable().openapi({
    description: '章节文件信息'
  }),
  status: z.string().openapi({
    description: '状态：pending-待处理, reviewing-审核中, completed-已完成',
    example: 'completed'
  }),
  aiSuggestions: z.string().nullable().openapi({
    description: 'AI修改建议',
    example: '建议增加具体的数据支持和案例说明'
  }),
  version: z.number().int('必须是整数').positive('必须是正整数').openapi({
    description: '版本号',
    example: 2
  }),
  createdAt: z.coerce.date<Date>('创建时间格式不正确').openapi({
    description: '创建时间',
    example: '2024-01-15T10:30:00Z'
  }),
  updatedAt: z.coerce.date<Date>('更新时间格式不正确').openapi({
    description: '更新时间',
    example: '2024-01-16T14:20:00Z'
  })
});

// 方案设计完整Schema
export const SolutionDesignSchema = z.object({
  id: z.number().int('必须是整数').positive('必须是正整数').openapi({
    description: '方案设计ID',
    example: 1
  }),
  title: z.string().min(1, '方案标题不能为空').max(255, '方案标题最多255个字符').openapi({
    description: '方案标题',
    example: '智慧城市建设项目方案'
  }),
  description: z.string().nullable().openapi({
    description: '方案描述',
    example: '针对智慧城市建设的完整解决方案'
  }),
  requirements: z.string().nullable().openapi({
    description: '需求描述',
    example: '需要包含物联网设备部署、数据分析平台和用户界面设计'
  }),
  user: UserSchema.openapi({
    description: '创建用户信息'
  }),
  originalFile: FileSchema.nullable().openapi({
    description: '原始文件信息'
  }),
  outputFile: FileSchema.nullable().openapi({
    description: '输出文件信息'
  }),
  outputFormat: z.string().openapi({
    description: '输出格式：docx/pdf',
    example: 'docx'
  }),
  status: z.string().openapi({
    description: '状态：draft-草稿, reviewing-审核中, completed-已完成',
    example: 'completed'
  }),
  progress: z.number().int('必须是整数').min(0, '进度不能为负数').max(100, '进度不能超过100').openapi({
    description: '完成进度百分比',
    example: 85
  }),
  totalChapters: z.number().int('必须是整数').min(0, '章节数不能为负数').openapi({
    description: '总章节数',
    example: 8
  }),
  completedChapters: z.number().int('必须是整数').min(0, '完成章节数不能为负数').openapi({
    description: '已完成章节数',
    example: 7
  }),
  chapters: z.array(SolutionChapterSchema).openapi({
    description: '章节列表'
  }),
  isDeleted: z.number().int('必须是整数').min(0, '状态值只能是0或1').max(1, '状态值只能是0或1').default(DeleteStatus.NOT_DELETED).openapi({
    description: '是否删除：0-未删除，1-已删除',
    example: DeleteStatus.NOT_DELETED
  }),
  createdAt: z.coerce.date<Date>('创建时间格式不正确').openapi({
    description: '创建时间',
    example: '2024-01-15T10:30:00Z'
  }),
  updatedAt: z.coerce.date<Date>('更新时间格式不正确').openapi({
    description: '更新时间',
    example: '2024-01-16T14:20:00Z'
  })
});

// 创建方案设计请求Schema
export const CreateSolutionDesignDto = z.object({
  title: z.string().min(1, '方案标题不能为空').max(255, '方案标题最多255个字符').openapi({
    description: '方案标题',
    example: '智慧城市建设项目方案'
  }),
  description: z.string().nullable().optional().openapi({
    description: '方案描述',
    example: '针对智慧城市建设的完整解决方案'
  }),
  requirements: z.string().nullable().optional().openapi({
    description: '需求描述',
    example: '需要包含物联网设备部署、数据分析平台和用户界面设计'
  }),
  originalFileId: z.coerce.number<number>().int('必须是整数').positive('必须是正整数').optional().openapi({
    description: '原始文件ID',
    example: 1
  }),
  outputFormat: z.string().default('docx').openapi({
    description: '输出格式：docx/pdf',
    example: 'docx'
  })
});

// 更新方案设计请求Schema
export const UpdateSolutionDesignDto = z.object({
  title: z.string().min(1, '方案标题不能为空').max(255, '方案标题最多255个字符').optional().openapi({
    description: '方案标题',
    example: '智慧城市建设项目方案（更新版）'
  }),
  description: z.string().nullable().optional().openapi({
    description: '方案描述',
    example: '针对智慧城市建设的完整解决方案（修订版）'
  }),
  requirements: z.string().nullable().optional().openapi({
    description: '需求描述',
    example: '需要包含物联网设备部署、数据分析平台和用户界面设计'
  }),
  outputFormat: z.string().optional().openapi({
    description: '输出格式：docx/pdf',
    example: 'pdf'
  }),
  status: z.string().optional().openapi({
    description: '状态：draft-草稿, reviewing-审核中, completed-已完成',
    example: 'completed'
  })
});

// 创建章节请求Schema
export const CreateSolutionChapterDto = z.object({
  chapterNumber: z.coerce.number<number>().int('必须是整数').positive('必须是正整数').openapi({
    description: '章节编号',
    example: 1
  }),
  title: z.string().min(1, '章节标题不能为空').max(255, '章节标题最多255个字符').openapi({
    description: '章节标题',
    example: '项目概述'
  }),
  content: z.string().nullable().optional().openapi({
    description: '章节内容',
    example: '本章节描述项目的基本情况和背景...'
  }),
  modificationInstructions: z.string().nullable().optional().openapi({
    description: '修改说明',
    example: '需要增加项目目标和预期成果的描述'
  })
});

// 更新章节请求Schema
export const UpdateSolutionChapterDto = z.object({
  title: z.string().min(1, '章节标题不能为空').max(255, '章节标题最多255个字符').optional().openapi({
    description: '章节标题',
    example: '项目概述（更新）'
  }),
  content: z.string().nullable().optional().openapi({
    description: '章节内容',
    example: '更新后的项目概述内容...'
  }),
  modificationInstructions: z.string().nullable().optional().openapi({
    description: '修改说明',
    example: '已增加项目目标和预期成果的描述'
  }),
  status: z.string().optional().openapi({
    description: '状态：pending-待处理, reviewing-审核中, completed-已完成',
    example: 'completed'
  })
});