import { z } from 'zod/v4';

const locationSchema = z.object({
  lat: z.number().min(-90).max(90),
  lng: z.number().min(-180).max(180),
});

export const CreateStoreSchema = z.object({
  name: z.string().min(1).max(200).trim(),
  address: z.string().max(500).trim().optional(),
  location: locationSchema.optional(),
  url: z.url().optional(),
  notes: z.string().max(1000).trim().optional(),
  tags: z.array(z.string().min(1).max(50).trim()).default([]),
  isActive: z.boolean().default(true),
});

export const UpdateStoreSchema = z.object({
  name: z.string().min(1).max(200).trim().optional(),
  address: z.string().max(500).trim().optional(),
  location: locationSchema.optional(),
  url: z.url().optional(),
  notes: z.string().max(1000).trim().optional(),
  tags: z.array(z.string().min(1).max(50).trim()).optional(),
  isActive: z.boolean().optional(),
});

export const StoreQuerySchema = z.object({
  tags: z.string().optional(),
  search: z.string().max(200).optional(),
  cursor: z.string().optional(),
  limit: z.coerce.number().int().min(1).max(100).default(20),
});

export const StoreResponseSchema = z.object({
  _id: z.string(),
  householdId: z.string(),
  name: z.string(),
  address: z.string().optional(),
  location: locationSchema.optional(),
  url: z.string().optional(),
  notes: z.string().optional(),
  tags: z.array(z.string()),
  isActive: z.boolean(),
  createdBy: z.string(),
  createdAt: z.string(),
  updatedAt: z.string(),
});

export const StoreListResponseSchema = z.object({
  data: z.array(StoreResponseSchema),
  pagination: z.object({
    cursor: z.string().nullable(),
    hasMore: z.boolean(),
  }),
});

export type CreateStoreInput = z.infer<typeof CreateStoreSchema>;
export type UpdateStoreInput = z.infer<typeof UpdateStoreSchema>;
export type StoreQueryInput = z.infer<typeof StoreQuerySchema>;
