# 🎨 FakeDataGenerator Project - Documentação do Estado Atual

## 📋 **Objetivo do Projeto**

Criar um serviço de geração de dados fake para propriedades imobiliárias que:
- Use o **schema base oficial** como fonte de verdade dos campos
- Permita **configuração manual** de tipos, subtipos e valores
- Gere dados **realistas e variados** para desenvolvimento e testes
- Mantenha **imagens Unsplash** dos fake data existentes

## 🏗️ **Arquitetura Definida**

### **1. Schema como Base**
- **Source**: `/src/schemas/horizon-property-schema-base.json`
- **Tipo Zod**: `HorizonPropertySchemaBaseType` (já gerado)
- **Função**: Define TODOS os campos possíveis, tipos, enums, obrigatórios

### **2. Config de Exemplos**
- **Localização**: `__dev__/configs/fake-data-examples.ts` (a criar)
- **Função**: Configuração manual de valores possíveis por campo
- **Exemplos**:
  ```typescript
  export const fakeDataExamples = {
    tipos: ["Apartamento", "Casa", "Sobrado", "Cobertura", "Terreno"],
    subtipos: {
      "Apartamento": ["Padrão", "Studio", "Loft", "Duplex"],
      "Casa": ["Térrea", "Sobreposta", "Geminada"]
    },
    cidades: ["São Paulo", "Rio de Janeiro", "Belo Horizonte"],
    bairros: {
      "São Paulo": ["Vila Madalena", "Pinheiros", "Itaim Bibi"],
      "Rio de Janeiro": ["Copacabana", "Ipanema", "Leblon"]
    },
    caracteristicas: ["Churrasqueira", "Piscina", "Academia", "Jardim"],
    // ... mais configurações
  }
  ```

### **3. FakeDataGenerator Service**
- **Localização**: `__dev__/services/FakeDataGenerator.ts`
- **Função**: 
  - Lê o schema JSON para saber os campos
  - Usa config de exemplos para valores
  - Gera propriedades seguindo `HorizonPropertySchemaBaseType`
  - Mantém imagens Unsplash existentes

### **4. Script de Execução**
- **Localização**: `__dev__/scripts/generate-fake-properties.ts`
- **Comando**: `pnpm dev:generate-fake`
- **Função**: Executa o generator com configurações

## 🔄 **Estado Atual do Projeto**

### ✅ **Já Implementado**
1. **ObjectTransformer** movido para dev-toolkit v1.2.0
2. **Script de customização** funcionando (`pnpm dev:customize`)
3. **README atualizado** - removido serviços obsoletos
4. **Index.ts limpo** - só exporta fake-data, schemas, utils
5. **FakeDataGenerator v1** criado (mas precisa refatoração)

### 🚧 **Próximos Passos Definidos**
1. **Criar config de exemplos** (`fake-data-examples.ts`)
2. **Refatorar FakeDataGenerator** para usar schema + config
3. **Testar geração** com dados configuráveis
4. **Integrar com exportação** do pacote

## 📁 **Estrutura de Arquivos**

```
__dev__/
├── configs/
│   ├── property-customer-rules.ts     ✅ (ObjectTransformer rules)
│   └── fake-data-examples.ts          🚧 (a criar - config de valores)
├── data/
│   ├── properties-demo/               ✅ (dados reais - só referência)
│   └── fake-properties-output/        ✅ (saída do generator)
├── scripts/
│   ├── customize-properties.ts        ✅ (ObjectTransformer + BatchFileConverter)
│   └── generate-fake-properties.ts    ✅ (executa FakeDataGenerator)
└── services/
    └── FakeDataGenerator.ts           🚧 (refatorar - usar schema+config)
```

## 🎯 **Especificações Técnicas**

### **Config de Exemplos (fake-data-examples.ts)**
```typescript
export interface FakeDataExamples {
  // Tipos principais
  tipos: string[]
  subtipos: Record<string, string[]>
  
  // Localização
  cidades: string[]
  bairros: Record<string, string[]>
  logradouros: string[]
  
  // Características
  caracteristicas: string[]
  
  // Ranges numéricos
  ranges: {
    dormitorios: [number, number]
    banheiros: [number, number]
    vagas_garagem: [number, number]
    area_total: [number, number]
    valor_venda: [number, number]
  }
  
  // Imagens por categoria
  images: {
    apartamento: string[]
    casa: string[]
    terreno: string[]
    comercial: string[]
  }
}
```

### **FakeDataGenerator Refatorado**
```typescript
export class FakeDataGenerator {
  private schema: any              // JSON schema
  private examples: FakeDataExamples  // Config de exemplos
  private zodType: HorizonPropertySchemaBaseType  // Tipo para validação
  
  // Métodos principais:
  generateProperty(): HorizonPropertySchemaBaseType
  generateByType(tipo: string): HorizonPropertySchemaBaseType
  generateBatch(count: number): HorizonPropertySchemaBaseType[]
}
```

## 🎨 **Fluxo de Geração**

1. **Lê schema JSON** → sabe quais campos existem
2. **Carrega config de exemplos** → valores possíveis por campo  
3. **Para cada campo do schema**:
   - Se tem `enumValues` → usar enum
   - Se tem config → usar valores do config
   - Se tem `required: true` → garantir valor
   - Se tem `type: "Number"` → usar ranges
4. **Gera combinações lógicas** (ex: Apartamento + subtipo compatível)
5. **Adiciona imagens** baseado no tipo
6. **Valida com Zod** antes de retornar

## 🚀 **Comandos Disponíveis**

```bash
# Gerar dados fake
pnpm dev:generate-fake

# Customizar propriedades existentes  
pnpm dev:customize

# Gerar schemas Zod
pnpm generate:zod
```

## 📝 **Notas Importantes**

- ✅ **Dados demo** são só para **referência/entendimento**
- ✅ **Config manual** é a **fonte de verdade** dos valores
- ✅ **Schema JSON** define **estrutura** e **validações**
- ✅ **Tipo Zod** garante **type safety**
- ✅ **Imagens Unsplash** são **mantidas** dos fake data existentes

---

## 🎉 **Status**: CONCLUÍDO COM SUCESSO

**Última atualização**: 03/08/2025 - Jefferson
**Implementação**: ✅ FakeDataGenerator v2.1 atualizado com novos campos

### ✅ **Entregáveis Finalizados**

1. **FakeDataGenerator v2.1**
   - Gerador baseado em schema JSON + configuração manual
   - Validação com Zod garantindo type safety
   - Suporte a tipos principais e subtipos
   - **Atualizado com novos campos**:
     - `condominio_id` → `condo_id`
     - Nova geração de `condo_slug`
     - `corretor_id` → `broker_id`
     - Nova geração de `broker_slug`

2. **Estrutura de Tipos/Subtipos**
   - **Casas/Sobrados**: Casa, Sobrado, Casa de Condomínio
   - **Apartamentos**: Apartamento Padrão, Cobertura, Duplex, Triplex, Studio, Loft, Garden
   - **Terrenos/Lotes**: Terreno, Lote
   - **Comerciais**: Loja Comercial, Sala Comercial, Prédio Comercial, Ponto Comercial
   - **Rurais**: Chácara, Sítio, Fazenda, Rancho
   - **Industriais**: Galpão Industrial, Barracão, Área Industrial

3. **Exportações do Pacote**
   ```typescript
   import { 
     FakeDataApartamentos,
     FakeDataCasasSobrados,
     FakeDataComerciais,
     FakeDataIndustriais,
     FakeDataRurais,
     FakeDataTerrenosLotes,
     FakeDataAllProperties
   } from '@horizon-domains/property-model'
   ```

4. **Comandos Disponíveis**
   - `pnpm dev:generate-fake` - Gera dados fake e copia para exportação
   - `pnpm dev:customize` - Customiza propriedades existentes
   - `pnpm generate:zod` - Gera schemas Zod

### 📊 **Resultados**
- 100 propriedades geradas sem erros de validação
- Dados realistas baseados em configuração manual
- Imagens Unsplash categorizadas por tipo
- Build do pacote funcionando perfeitamente
- **Novos campos adicionados**: Geração automática de slugs para condomínios e corretores

### 🔄 **Changelog v2.1 (03/08/2025)**
- ✅ Alterado `condominio_id` para `condo_id` conforme schema atualizado
- ✅ Adicionada geração automática de `condo_slug` baseada no nome do condomínio
- ✅ Alterado `corretor_id` para `broker_id` conforme schema atualizado  
- ✅ Adicionada geração automática de `broker_slug` baseada no nome do corretor
- ✅ Implementadas funções `generateCondoSlug()` e `generateBrokerSlug()` para criar URLs amigáveis