import { z } from '@hono/zod-openapi';

// 客户需求实体Schema
export const ConsultationRequestSchema = z.object({
  id: z.number().int().positive().openapi({
    description: '客户需求ID',
    example: 1
  }),
  customerName: z.string().max(255).openapi({
    description: '客户姓名',
    example: '张三'
  }),
  companyName: z.string().max(255).nullable().openapi({
    description: '公司名称',
    example: 'ABC科技有限公司'
  }),
  phone: z.string().max(20).openapi({
    description: '手机号',
    example: '13800138000'
  }),
  email: z.string().email().nullable().openapi({
    description: '邮箱地址',
    example: 'zhangsan@example.com'
  }),
  projectType: z.string().max(100).openapi({
    description: '项目类型',
    example: '企业ERP系统'
  }),
  projectDescription: z.string().openapi({
    description: '项目描述',
    example: '我们需要开发一个企业ERP系统，包含财务、采购、销售等模块'
  }),
  budgetRange: z.string().max(100).nullable().openapi({
    description: '预算范围',
    example: '10-50万'
  }),
  timeline: z.string().max(100).nullable().openapi({
    description: '项目时间要求',
    example: '3-6个月'
  }),
  status: z.string().openapi({
    description: '状态',
    example: 'pending'
  }),
  isGuest: z.number().openapi({
    description: '是否为游客提交',
    example: 1
  }),
  ipAddress: z.string().max(45).nullable().openapi({
    description: '提交IP地址',
    example: '192.168.1.1'
  }),
  userAgent: z.string().nullable().openapi({
    description: '用户代理信息',
    example: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  }),
  createdAt: z.coerce.date().openapi({
    description: '创建时间',
    example: '2024-01-01T12:00:00Z'
  }),
  updatedAt: z.coerce.date().openapi({
    description: '更新时间',
    example: '2024-01-01T12:00:00Z'
  })
});

// 创建客户需求DTO Schema（支持游客提交）
export const CreateConsultationRequestDto = z.object({
  customerName: z.string().min(2, '姓名至少2个字符').max(255).openapi({
    description: '客户姓名',
    example: '张三'
  }),
  companyName: z.string().max(255).optional().openapi({
    description: '公司名称',
    example: 'ABC科技有限公司'
  }),
  phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入正确的手机号').openapi({
    description: '手机号',
    example: '13800138000'
  }),
  email: z.string().email('请输入正确的邮箱地址').optional().openapi({
    description: '邮箱地址',
    example: 'zhangsan@example.com'
  }),
  projectType: z.string().min(1, '请选择项目类型').max(100).openapi({
    description: '项目类型',
    example: '企业ERP系统'
  }),
  projectDescription: z.string().min(10, '项目描述至少10个字符').max(2000).openapi({
    description: '项目描述',
    example: '我们需要开发一个企业ERP系统，包含财务、采购、销售等模块'
  }),
  budgetRange: z.string().max(100).optional().openapi({
    description: '预算范围',
    example: '10-50万'
  }),
  timeline: z.string().max(100).optional().openapi({
    description: '项目时间要求',
    example: '3-6个月'
  }),
  isGuest: z.boolean().default(true).openapi({
    description: '是否为游客提交',
    example: true
  }),
  captchaToken: z.string().optional().openapi({
    description: '机器人验证token',
    example: 'captcha_token_123'
  })
});

// 更新客户需求DTO Schema
export const UpdateConsultationRequestDto = z.object({
  customerName: z.string().min(2, '姓名至少2个字符').max(255).optional().openapi({
    description: '客户姓名',
    example: '张三'
  }),
  companyName: z.string().max(255).optional().openapi({
    description: '公司名称',
    example: 'ABC科技有限公司'
  }),
  phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入正确的手机号').optional().openapi({
    description: '手机号',
    example: '13800138000'
  }),
  email: z.string().email('请输入正确的邮箱地址').optional().openapi({
    description: '邮箱地址',
    example: 'zhangsan@example.com'
  }),
  projectType: z.string().min(1, '请选择项目类型').max(100).optional().openapi({
    description: '项目类型',
    example: '企业ERP系统'
  }),
  projectDescription: z.string().min(10, '项目描述至少10个字符').max(2000).optional().openapi({
    description: '项目描述',
    example: '我们需要开发一个企业ERP系统，包含财务、采购、销售等模块'
  }),
  budgetRange: z.string().max(100).optional().openapi({
    description: '预算范围',
    example: '10-50万'
  }),
  timeline: z.string().max(100).optional().openapi({
    description: '项目时间要求',
    example: '3-6个月'
  }),
  status: z.enum(['pending', 'processing', 'completed']).optional().openapi({
    description: '状态',
    example: 'processing'
  })
});