import { z } from "zod"

// Schema Horizon v2.2.0 para HorizonPropertySchemaBase
// Gerado automaticamente com inferência inteligente
export const HorizonPropertySchemaBaseZod = z.object({
  reference: z.string().describe("Referência"),
  updated_at: z.string().describe("Última atualização").optional(),
  title: z.string().max(200).describe("Título"),
  description: z.string().describe("Descrição"),
  seo_slug: z.string().describe("Slug SEO").optional(),
  seo_title: z.string().max(60).describe("Título SEO").optional(),
  seo_description: z.string().max(160).describe("Descrição SEO").optional(),
  seo_keywords: z.string().max(200).describe("Palavras-chave SEO").optional(),
  main_image: z.any().describe("Imagem principal").optional(),
  images: z.array(z.any()).describe("Imagens"),
  videos: z.array(z.any()).describe("Vídeos"),
  virtual_tours: z.array(z.any()).describe("Tours virtuais"),
  documents: z.array(z.any()).describe("Documentos"),
  currency: z.string().describe("Moeda").optional(),
  unit_area: z.string().describe("Unidade de área").optional(),
  unit_distance: z.enum(["meters", "km"]).describe("Unidade de distância").optional(),
  map_show_proximity: z.boolean().describe("Exibir aproximado no mapa").optional(),
  operacao: z.array(z.enum(["venda", "locacao", "temporada"])).describe("Operação").optional(),
  valor_venda: z.number().multipleOf(0.01).describe("Valor de venda").optional(),
  valor_locacao: z.number().multipleOf(0.01).describe("Valor de locação").optional(),
  valor_diaria: z.number().multipleOf(0.01).describe("Valor da diária").optional(),
  valor_condominio: z.number().multipleOf(0.01).describe("Valor do condomínio").optional(),
  valor_iptu: z.number().multipleOf(0.01).describe("Valor do IPTU").optional(),
  area_total: z.number().min(0).describe("Área total").optional(),
  area_privativa: z.number().min(0).describe("Área privativa").optional(),
  area_util: z.number().min(0).describe("Área útil").optional(),
  dormitorios: z.number().min(0).describe("Dormitórios").optional(),
  suites: z.number().min(0).describe("Suítes").optional(),
  banheiros: z.number().min(0).describe("Banheiros").optional(),
  vagas_garagem: z.number().min(0).describe("Vagas de garagem").optional(),
  finalidade: z.string().describe("Finalidade").optional(),
  tipo: z.string().describe("Tipo do imóvel").optional(),
  subtipo: z.string().describe("Sub-tipo do imóvel").optional(),
  endereco_cep: z.string().max(9).describe("CEP").optional(),
  endereco_estado: z.string().describe("Estado").optional(),
  endereco_cidade: z.string().describe("Cidade").optional(),
  endereco_bairro: z.string().describe("Bairro").optional(),
  endereco_logradouro: z.string().describe("Logradouro").optional(),
  endereco_numero: z.string().describe("Número").optional(),
  endereco_complemento: z.string().describe("Complemento").optional(),
  endereco_referencia: z.string().describe("Referência").optional(),
  endereco_zona: z.string().describe("Zona").optional(),
  latitude: z.number().min(-90).max(90).multipleOf(1e-8).describe("Latitude").optional(),
  longitude: z.number().min(-180).max(180).multipleOf(1e-8).describe("Longitude").optional(),
  mobiliado: z.boolean().describe("Mobiliado").optional(),
  caracteristicas: z.array(z.string()).describe("Características").optional(),
  destaque: z.boolean().describe("Imóvel em destaque").optional(),
  corretor_key: z.string().describe("ID do corretor").optional(),
  corretor_nome: z.string().describe("Nome do corretor").optional(),
  condominio_key: z.string().describe("ID do condomínio").optional(),
  condominio_nome: z.string().describe("Nome do condomínio").optional(),
  tags: z.array(z.string()).describe("Tags do Imóvel").optional(),
  numero_pessoas: z.number().min(0).describe("Número de pessoas").optional(),
})

// Tipo inferido a partir do schema
export type HorizonPropertySchemaBaseType = z.infer<typeof HorizonPropertySchemaBaseZod>

// Função helper para validação
export const validateHorizonPropertySchemaBase = (data: unknown): HorizonPropertySchemaBaseType => {
  return HorizonPropertySchemaBaseZod.parse(data)
}

// Função helper para validação safe
export const safeValidateHorizonPropertySchemaBase = (data: unknown) => {
  return HorizonPropertySchemaBaseZod.safeParse(data)
}

// Função helper para validação parcial
export const validatePartialHorizonPropertySchemaBase = (data: unknown) => {
  return HorizonPropertySchemaBaseZod.partial().parse(data)
}
