import { z } from 'zod';

// 证件类型枚举
export enum IdType {
  ID_CARD = '身份证',        // 身份证
  HONG_KONG_MACAO_PASS = '港澳通行证',     // 港澳通行证
  TAIWAN_PASS = '台湾通行证', // 台湾通行证
  PASSPORT = '护照',            // 护照
  OTHER = '其他证件'           // 其他证件
}

// 证件类型枚举schema
export const IdTypeSchema = z.nativeEnum(IdType);

// 创建乘客schema (管理端使用)
export const PassengerCreateSchema = z.object({
  userId: z.number().int().positive(),
  name: z.string().min(1).max(50),
  idType: IdTypeSchema,
  idNumber: z.string().min(1).max(30),
  phone: z.string().min(1).max(20),
  isDefault: z.boolean().optional().default(false)
});

// 用户端创建乘客schema (不需要userId)
export const PassengerUserCreateSchema = z.object({
  name: z.string().min(1).max(50),
  idType: IdTypeSchema,
  idNumber: z.string().min(1).max(30),
  phone: z.string().min(1).max(20),
  isDefault: z.boolean().optional().default(false)
});

// 更新乘客schema
export const PassengerUpdateSchema = z.object({
  name: z.string().min(1).max(50).optional(),
  idType: IdTypeSchema.optional(),
  idNumber: z.string().min(1).max(30).optional(),
  phone: z.string().min(1).max(20).optional(),
  isDefault: z.boolean().optional()
});

// 获取乘客schema
export const PassengerGetSchema = z.object({
  id: z.number().int().positive()
});

// 乘客列表查询schema
export const PassengerListSchema = z.object({
  page: z.number().int().positive().optional().default(1),
  pageSize: z.number().int().positive().optional().default(20),
  keyword: z.string().optional(),
  userId: z.number().int().positive().optional()
});

// 用户关系schema
export const UserRelationSchema = z.object({
  id: z.number(),
  username: z.string(),
  nickname: z.string().nullable(),
  email: z.string().nullable(),
  phone: z.string().nullable(),
  name: z.string().nullable()
});

// 乘客响应schema
export const PassengerResponseSchema = z.object({
  id: z.number(),
  userId: z.number(),
  name: z.string(),
  idType: IdTypeSchema,
  idNumber: z.string(),
  phone: z.string(),
  isDefault: z.boolean(),
  createdAt: z.date(),
  updatedAt: z.date(),
  createdBy: z.number().nullable().optional(),
  updatedBy: z.number().nullable().optional(),
  user: UserRelationSchema.optional()
});

// 乘客列表响应schema
export const PassengerListResponseSchema = z.object({
  data: z.array(PassengerResponseSchema),
  total: z.number(),
  page: z.number(),
  pageSize: z.number()
});

// 导出类型
export type PassengerCreateInput = z.infer<typeof PassengerCreateSchema>;
export type PassengerUserCreateInput = z.infer<typeof PassengerUserCreateSchema>;
export type PassengerUpdateInput = z.infer<typeof PassengerUpdateSchema>;
export type PassengerGetParams = z.infer<typeof PassengerGetSchema>;
export type PassengerListParams = z.infer<typeof PassengerListSchema>;
export type PassengerResponse = z.infer<typeof PassengerResponseSchema>;
export type PassengerListResponse = z.infer<typeof PassengerListResponseSchema>;