import { z } from 'zod';

export const createTaskSchema = z.object({
  title: z.string().min(1, 'Título requerido').max(200),
  description: z.string().max(2000).optional(),
  dueDate: z.string().datetime().optional(),
  priority: z.enum(['LOW', 'MEDIUM', 'HIGH', 'URGENT']).default('MEDIUM'),
  propertyId: z.number().int().positive().optional(),
});

export const updateTaskSchema = z.object({
  title: z.string().min(1).max(200).optional(),
  description: z.string().max(2000).optional(),
  dueDate: z.string().datetime().optional(),
  priority: z.enum(['LOW', 'MEDIUM', 'HIGH', 'URGENT']).optional(),
  isCompleted: z.boolean().optional(),
});

export const taskQuerySchema = z.object({
  page: z.coerce.number().default(1),
  limit: z.coerce.number().default(20).refine(val => val <= 100, { message: 'Limit must be 100 or less' }),
  status: z.enum(['true', 'false']).transform((v) => v === 'true'),
  priority: z.enum(['LOW', 'MEDIUM', 'HIGH', 'URGENT']).optional(),
  userId: z.coerce.number().int().positive().optional(),
});

export type CreateTaskInput = z.infer<typeof createTaskSchema>;
export type UpdateTaskInput = z.infer<typeof updateTaskSchema>;
export type TaskQueryInput = z.infer<typeof taskQuerySchema>;