import { z } from "zod";

// 개별 필드 스키마 재사용을 위한 별도 export
export const nicknameSchema = z
  .string()
  .min(2, "아이디는 2자 이상이어야 합니다")
  .max(20, "아이디는 20자 이하이어야 합니다");
export const nameSchema = z
  .string()
  .min(1, "닉네임을 입력해주세요")
  .max(50, "닉네임은 50자 이하이어야 합니다");

export const registerSchema = z
  .object({
    nickname: nicknameSchema,
    name: nameSchema,
    password: z
      .string()
      .min(8, "비밀번호는 8자 이상이어야 합니다")
      .max(100, "비밀번호는 100자 이하이어야 합니다"),
    confirmPassword: z
      .string()
      .min(8, "비밀번호 확인은 8자 이상이어야 합니다")
      .max(100, "비밀번호 확인은 100자 이하이어야 합니다"),
    agreeTerms: z.literal(true, { errorMap: () => ({ message: "약관 동의 필요" }) }),
    // 프로필 이미지는 선택 사항. 내부 업로드(/uploads/...) 또는 http(s) URL만 허용
    profileImage: z
      .string()
      .max(1000)
      .optional()
      .refine(
        (v) =>
          v === undefined ||
          v.startsWith("/uploads/") ||
          v.startsWith("http://") ||
          v.startsWith("https://"),
        { message: "잘못된 이미지 주소" }
      ),
  })
  .refine((d) => d.password === d.confirmPassword, {
    message: "비밀번호가 일치하지 않습니다",
    path: ["confirmPassword"],
  });

export type RegisterInput = z.infer<typeof registerSchema>;

export const loginSchema = z.object({
  id: z
    .string()
    .min(2, "아이디는 2자 이상이어야 합니다")
    .max(20, "아이디는 20자 이하이어야 합니다"),
  password: z
    .string()
    .min(8, "비밀번호는 8자 이상이어야 합니다")
    .max(100, "비밀번호는 100자 이하이어야 합니다"),
});

export type LoginInput = z.infer<typeof loginSchema>;


