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

// 公司实体Schema
export const CompanySchema = z.object({
  id: z.number().int().positive().openapi({
    description: '公司ID',
    example: 1
  }),
  platformId: z.number().int().positive().nullable().optional().openapi({
    description: '平台ID',
    example: 1
  }),
  companyName: z.string().max(100).openapi({
    description: '公司名称',
    example: '示例科技有限公司'
  }),
  contactPerson: z.string().max(50).nullable().optional().openapi({
    description: '联系人',
    example: '张三'
  }),
  contactPhone: z.string().max(20).nullable().optional().openapi({
    description: '联系电话',
    example: '13800138000'
  }),
  contactEmail: z.string().email().max(100).nullable().optional().openapi({
    description: '联系邮箱',
    example: 'zhangsan@example.com'
  }),
  address: z.string().max(200).nullable().optional().openapi({
    description: '地址',
    example: '北京市朝阳区'
  }),
  status: z.number().int().min(0).max(1).default(1).openapi({
    description: '状态：1-正常，0-禁用',
    example: 1
  }),
  createTime: z.coerce.date().openapi({
    description: '创建时间',
    example: '2024-01-01T00:00:00Z'
  }),
  updateTime: z.coerce.date().openapi({
    description: '更新时间',
    example: '2024-01-01T00:00:00Z'
  }),
  platform: z.any().optional().openapi({
    description: '关联的平台信息'
  })
});

// 创建公司DTO
export const CreateCompanySchema = z.object({
  platformId: z.number().int().positive().optional().openapi({
    description: '平台ID',
    example: 1
  }),
  companyName: z.string().min(1, '公司名称不能为空').max(100, '公司名称不能超过100个字符').openapi({
    description: '公司名称',
    example: '示例科技有限公司'
  }),
  contactPerson: z.string().max(50).optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '联系人',
    example: '张三'
  }),
  contactPhone: z.string().max(20).optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '联系电话',
    example: '13800138000'
  }),
  contactEmail: z.string().email('请输入有效的邮箱地址').max(100, '邮箱地址不能超过100个字符').optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '联系邮箱',
    example: 'zhangsan@example.com'
  }),
  address: z.string().max(200, '地址不能超过200个字符').optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '地址',
    example: '北京市朝阳区'
  })
});

// 更新公司DTO
export const UpdateCompanySchema = z.object({
  id: z.number().int().positive().openapi({
    description: '公司ID',
    example: 1
  }),
  platformId: z.number().int().positive().optional().openapi({
    description: '平台ID',
    example: 1
  }),
  companyName: z.string().min(1, '公司名称不能为空').max(100, '公司名称不能超过100个字符').optional().openapi({
    description: '公司名称',
    example: '示例科技有限公司'
  }),
  contactPerson: z.string().max(50).optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '联系人',
    example: '张三'
  }),
  contactPhone: z.string().max(20).optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '联系电话',
    example: '13800138000'
  }),
  contactEmail: z.string().email('请输入有效的邮箱地址').max(100, '邮箱地址不能超过100个字符').optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '联系邮箱',
    example: 'zhangsan@example.com'
  }),
  address: z.string().max(200, '地址不能超过200个字符').optional().transform((val) => val === '' ? undefined : val).openapi({
    description: '地址',
    example: '北京市朝阳区'
  })
});

// 删除公司DTO
export const DeleteCompanySchema = z.object({
  id: z.number().int().positive().openapi({
    description: '公司ID',
    example: 1
  })
});

// 分页查询参数Schema
export const PaginationQuerySchema = z.object({
  skip: z.coerce.number().int().min(0).default(0).optional().openapi({
    description: '跳过记录数',
    example: 0
  }),
  take: z.coerce.number().int().min(1).max(100).default(10).optional().openapi({
    description: '获取记录数',
    example: 10
  })
});

// 搜索公司参数Schema
export const SearchCompanyQuerySchema = PaginationQuerySchema.extend({
  name: z.string().min(1).openapi({
    description: '搜索关键词',
    example: '科技'
  })
});

// 类型定义
export type Company = z.infer<typeof CompanySchema>;
export type CreateCompanyDto = z.infer<typeof CreateCompanySchema>;
export type UpdateCompanyDto = z.infer<typeof UpdateCompanySchema>;
export type DeleteCompanyDto = z.infer<typeof DeleteCompanySchema>;
export type PaginationQuery = z.infer<typeof PaginationQuerySchema>;
export type SearchCompanyQuery = z.infer<typeof SearchCompanyQuerySchema>;