import { z } from "zod";
import { Types } from "mongoose";

const objectIdSchema = z
  .string()
  .min(1, "ID is required")
  .refine((id) => Types.ObjectId.isValid(id), "Invalid ObjectId");

export const inviteByEmailSchema = z.object({
  email: z.string().email("Invalid email format").max(255),
});

export const nearbyUsersSchema = z.object({
  latitude: z.coerce
    .number()
    .min(-90, "Latitude must be between -90 and 90")
    .max(90, "Latitude must be between -90 and 90"),
  longitude: z.coerce
    .number()
    .min(-180, "Longitude must be between -180 and 180")
    .max(180, "Longitude must be between -180 and 180"),
  radius: z.coerce.number().positive().max(100).default(5),
  page: z.coerce.number().int().positive().default(1),
  limit: z.coerce.number().int().positive().max(100).default(20),
});

export const connectionsListSchema = z.object({
  page: z.coerce.number().int().positive().default(1),
  limit: z.coerce.number().int().positive().max(100).default(20),
  search: z.string().max(200).optional(),
});

export const requestsListSchema = z.object({
  type: z.enum(["received", "sent"], {
    errorMap: () => ({ message: "type must be 'received' or 'sent'" }),
  }),
  page: z.coerce.number().int().positive().default(1),
  limit: z.coerce.number().int().positive().max(100).default(20),
});

export const requestIdParamSchema = z.object({
  requestId: objectIdSchema,
});

export const removeConnectionParamSchema = z.object({
  userId: objectIdSchema,
});
