import { z } from '@hono/zod-openapi';
import { UserSchema } from '@d8d/user-module';

export const LoginSchema = z.object({
  username: z.string().min(3).openapi({
    example: 'admin',
    description: '用户名'
  }),
  password: z.string().min(6).openapi({
    example: 'admin123',
    description: '密码'
  })
});

export const RegisterSchema = z.object({
  username: z.string().min(3).openapi({
    example: 'john_doe',
    description: '用户名'
  }),
  password: z.string().min(6).openapi({
    example: 'password123',
    description: '密码'
  }),
  email: z.string().email().openapi({
    example: 'john@example.com',
    description: '邮箱'
  }).optional()
});

export const MiniLoginSchema = z.object({
  code: z.string().openapi({
    example: '08123456789012345678901234567890',
    description: '小程序登录code'
  }),
  userInfo: z.object({
    nickName: z.string().optional(),
    avatarUrl: z.string().optional()
  }).optional()
});

export const UserResponseSchema = UserSchema.omit({ password: true });

export const TokenResponseSchema = z.object({
  token: z.string().openapi({
    example: 'jwt.token.here',
    description: 'JWT Token'
  }),
  user: UserResponseSchema
});

export const MiniLoginResponseSchema = z.object({
  token: z.string().openapi({
    example: 'jwt.token.here',
    description: 'JWT Token'
  }),
  user: z.object({
    id: z.number(),
    username: z.string(),
    nickname: z.string().nullable(),
    phone: z.string().nullable(),
    email: z.string().nullable(),
    avatarFileId: z.number().nullable(),
    registrationSource: z.string()
  }),
  isNewUser: z.boolean().openapi({
    example: true,
    description: '是否为新注册用户'
  })
});

export const SuccessSchema = z.object({
  message: z.string().openapi({ example: '登出成功' })
});

export const PhoneDecryptSchema = z.object({
  encryptedData: z.string().openapi({
    example: 'encrypted_phone_data_here',
    description: '微信小程序加密的手机号数据'
  }),
  iv: z.string().openapi({
    example: 'encryption_iv_here',
    description: '加密算法的初始向量'
  })
});

export const PhoneDecryptResponseSchema = z.object({
  phoneNumber: z.string().openapi({
    example: '13800138000',
    description: '解密后的手机号'
  }),
  user: z.object({
    id: z.number(),
    username: z.string(),
    nickname: z.string().nullable(),
    phone: z.string().nullable(),
    email: z.string().nullable(),
    avatarFileId: z.number().nullable(),
    registrationSource: z.string()
  })
});