import React, { useState, useEffect } from 'react'; import { initializeApp } from 'firebase/app'; import { getAuth, signInAnonymously, onAuthStateChanged } from 'firebase/auth'; import { getFirestore, collection, addDoc, onSnapshot, query, timestamp } from 'firebase/firestore'; import { User, Home, MapPin, DollarSign, FileText, CheckCircle2, LogOut, Plus, List, Calendar, Phone, LayoutDashboard, ShieldCheck } from 'lucide-react'; // Configuração Firebase (Injetada pelo ambiente) const firebaseConfig = JSON.parse(__firebase_config); const app = initializeApp(firebaseConfig); const auth = getAuth(app); const db = getFirestore(app); const appId = typeof __app_id !== 'undefined' ? __app_id : 'master-imoveis-captacao'; const BROKERS = ["Douglas", "Adair", "Wilian", "José Wilton", "Aline"]; const PROPERTY_TYPES = ["Casa", "Apartamento", "Lote", "Chácara", "Ponto comercial", "Outro"]; const PAYMENT_METHODS = ["À vista", "Entrada + parcelamento", "Financiamento bancário", "Aceita veículo"]; export default function App() { const [user, setUser] = useState(null); const [password, setPassword] = useState(''); const [loginError, setLoginError] = useState(''); const [view, setView] = useState('form'); // 'form' ou 'list' const [captures, setCaptures] = useState([]); const [loading, setLoading] = useState(false); const [successMsg, setSuccessMsg] = useState(''); // Estado do Formulário const [formData, setFormData] = useState({ corretor: '', dataCaptacao: new Date().toISOString().split('T')[0], exclusividade: 'Não', anuncio: 'Sim', proprietarioNome: '', proprietarioContato: '', bairro: '', cidade: 'SJE', tipoImovel: 'Casa', medidaArea: '', finalidade: 'Venda', valor: '', condicoesPagamento: [], detalhes: '', marketingResponsavel: '', periodoRepost: '30' }); // 1. Autenticação (Regra 3) useEffect(() => { const initAuth = async () => { // Usaremos uma senha simples para o "Login" simulando acesso restrito // Na prática, o Firebase Auth gerencia a sessão. }; initAuth(); const unsubscribe = onAuthStateChanged(auth, setUser); return () => unsubscribe(); }, []); // 2. Busca de dados (Regra 2) useEffect(() => { if (!user) return; const q = collection(db, 'artifacts', appId, 'public', 'data', 'captures'); const unsubscribe = onSnapshot(q, (snapshot) => { const data = snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })); setCaptures(data); }, (err) => console.error("Erro ao buscar:", err)); return () => unsubscribe(); }, [user]); const handleLogin = async (e) => { e.preventDefault(); if (password === '1234') { // Senha simples definida para o sistema try { await signInAnonymously(auth); } catch (err) { setLoginError("Erro ao conectar ao servidor."); } } else { setLoginError("Senha incorreta."); } }; const handleTogglePayment = (method) => { setFormData(prev => ({ ...prev, condicoesPagamento: prev.condicoesPagamento.includes(method) ? prev.condicoesPagamento.filter(m => m !== method) : [...prev.condicoesPagamento, method] })); }; const handleSubmit = async (e) => { e.preventDefault(); if (!user) return; setLoading(true); try { await addDoc(collection(db, 'artifacts', appId, 'public', 'data', 'captures'), { ...formData, createdAt: new Date().toISOString(), userId: user.uid }); setSuccessMsg("Captação salva com sucesso!"); setTimeout(() => setSuccessMsg(''), 3000); setFormData({ ...formData, proprietarioNome: '', proprietarioContato: '', bairro: '', medidaArea: '', valor: '', detalhes: '', condicoesPagamento: [] }); } catch (err) { console.error(err); } finally { setLoading(false); } }; if (!user) { return (

Master Imóveis

Sistema Interno de Captação

setPassword(e.target.value)} className="w-full p-3 border border-slate-300 rounded-lg focus:ring-2 focus:ring-blue-500 outline-none" placeholder="Digite a senha..." />
{loginError &&

{loginError}

}
); } return (
{/* Header */}
Master Imóveis
{successMsg && (
{successMsg}
)} {view === 'form' ? (
{/* Seção 1: Corretor e Info Base */}
Informações do Corretor
setFormData({...formData, dataCaptacao: e.target.value})} className="w-full p-2.5 bg-slate-50 border border-slate-300 rounded-lg outline-none focus:ring-2 focus:ring-blue-500" />
{['Sim', 'Não'].map(opt => ( ))}
{['Sim', 'Não'].map(opt => ( ))}
{/* Seção 2: Proprietário */}
Dados do Proprietário
setFormData({...formData, proprietarioNome: e.target.value})} placeholder="Nome do cliente" className="w-full p-2.5 bg-slate-50 border border-slate-300 rounded-lg outline-none focus:ring-2 focus:ring-blue-500" />
setFormData({...formData, proprietarioContato: e.target.value})} placeholder="(00) 00000-0000" className="w-full p-2.5 bg-slate-50 border border-slate-300 rounded-lg outline-none focus:ring-2 focus:ring-blue-500" />
{/* Seção 3: Imóvel */}
Dados do Imóvel
setFormData({...formData, cidade: e.target.value})} className="w-full p-2.5 bg-slate-50 border border-slate-300 rounded-lg outline-none focus:ring-2 focus:ring-blue-500" />
setFormData({...formData, bairro: e.target.value})} placeholder="Ex: Residencial Paraíso" className="w-full p-2.5 bg-slate-50 border border-slate-300 rounded-lg outline-none focus:ring-2 focus:ring-blue-500" />
{PROPERTY_TYPES.map(type => ( ))}
setFormData({...formData, medidaArea: e.target.value})} placeholder="Ex: 200m²" className="w-full p-2.5 bg-slate-50 border border-slate-300 rounded-lg outline-none focus:ring-2 focus:ring-blue-500" />
setFormData({...formData, valor: e.target.value})} placeholder="950.000,00" className="w-full p-2.5 bg-slate-50 border border-slate-300 rounded-lg font-bold text-blue-600 outline-none focus:ring-2 focus:ring-blue-500" />
{/* Seção 4: Pagamento e Detalhes */}
Condições e Observações
{PAYMENT_METHODS.map(method => ( ))}
) : ( /* Lista de Captações */

Captações Recentes

{captures.length} imóveis cadastrados
{captures.length === 0 ? (

Nenhuma captação encontrada.

) : (
{[...captures].reverse().map(cap => (
{cap.tipoImovel} - {cap.finalidade}

{cap.bairro}, {cap.cidade}

R$ {cap.valor}

{new Date(cap.createdAt).toLocaleDateString()}

{cap.proprietarioNome}
{cap.proprietarioContato}
Captado por: {cap.corretor}
{cap.exclusividade === 'Sim' ? 'EXCLUSIVO' : 'SEM EXCLUSIVIDADE'}
{cap.detalhes && (
"{cap.detalhes}"
)}
))}
)}
)}
{/* Botão flutuante para troca rápida no mobile */}
); }