import { z } from 'zod';

export const propertyStatuses = ['disponible', 'separado', 'vendido'] as const;
export const propertyCategories = ['terreno', 'casa', 'departamento', 'local', 'oficina', 'fundo', 'galpon', 'edificio'] as const;

export const createPropertySchema = z.object({
  title: z.string().min(1, 'El título es requerido').max(200),
  description: z.string().optional(),
  price: z.number().positive('El precio debe ser mayor a 0'),
  status: z.enum(propertyStatuses).optional().default('disponible'),
  category: z.enum(propertyCategories).optional().default('casa'),

  address: z.string().optional(),
  city: z.string().optional(),
  province: z.string().optional(),

  area: z.number().positive().optional(),
  bedrooms: z.number().int().positive().optional(),
  bathrooms: z.number().int().positive().optional(),
  parking: z.number().int().nonnegative().optional(),

  ownerName: z.string().optional(),
  ownerPhone: z.string().optional(),
  ownerEmail: z.string().email().optional().or(z.literal('')),
});

export const updatePropertySchema = createPropertySchema.partial();

export const propertyFeatureSchema = z.object({
  antiguedad: z.string().optional(),
  estadoGeneral: z.string().optional(),
  pisos: z.number().int().positive().optional(),
  orientacion: z.string().optional(),
  agua: z.boolean().optional(),
  luz: z.boolean().optional(),
  desague: z.boolean().optional(),
  internet: z.boolean().optional(),
  gas: z.boolean().optional(),
  cable: z.boolean().optional(),
  telefono: z.boolean().optional(),
  seguridad: z.boolean().optional(),
  piscina: z.boolean().optional(),
  jardin: z.boolean().optional(),
  terraza: z.boolean().optional(),
  garage: z.boolean().optional(),
  amoblado: z.boolean().optional(),
  calefaccion: z.boolean().optional(),
  aireAcondicionado: z.boolean().optional(),
  ascensor: z.boolean().optional(),
  balcon: z.boolean().optional(),
  cocinaEquipada: z.boolean().optional(),
  deposito: z.boolean().optional(),
  lavanderia: z.boolean().optional(),
  quincho: z.boolean().optional(),
  salaDeEstar: z.boolean().optional(),
  estudio: z.boolean().optional(),
  comedor: z.boolean().optional(),
  hallDeEntrada: z.boolean().optional(),
});

export const propertyDocumentSchema = z.object({
  docType: z.string().min(1),
  category: z.enum(['legales', 'tecnicos', 'administrativos']),
});

export type CreatePropertyInput = z.infer<typeof createPropertySchema>;
export type UpdatePropertyInput = z.infer<typeof updatePropertySchema>;
export type PropertyFeatureInput = z.infer<typeof propertyFeatureSchema>;