import React, { useState, useRef } from 'react'; import { useComFi } from '../contexts/ComFiContext'; import { useToast } from '../contexts/ToastContext'; import { Building2, Save, UploadCloud, Camera, Palette, Tag, Plus, Trash2, Bell, Lock, UserCog, Mail, Key } from 'lucide-react'; import { Category } from '../types'; import { CustomSelect } from './CustomSelect'; export const SettingsView: React.FC = () => { const { tenant, setTenant, categories, setCategories, currentUser } = useComFi(); const { addToast } = useToast(); const [activeTab, setActiveTab] = useState<'company' | 'categories' | 'security'>('company'); // Organization State const [orgForm, setOrgForm] = useState(tenant); const logoInputRef = useRef(null); // Categories State const [newCategory, setNewCategory] = useState({ name: '', type: 'expense' as 'expense' | 'income' }); // Handle Organization Save const handleSaveOrg = () => { setTenant(orgForm); addToast({ type: 'success', title: 'Configurações Salvas', message: 'Dados da empresa atualizados.' }); }; const handleLogoUpload = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { const reader = new FileReader(); reader.onloadend = () => { setOrgForm({ ...orgForm, logo: reader.result as string }); }; reader.readAsDataURL(file); } }; // Handle Categories const handleAddCategory = () => { if (!newCategory.name) return; const category: Category = { id: Math.random().toString(36).substr(2, 9), name: newCategory.name, type: newCategory.type, color: newCategory.type === 'income' ? 'bg-green-50 text-green-600' : 'bg-red-50 text-red-600' }; setCategories([...categories, category]); setNewCategory({ name: '', type: 'expense' }); addToast({ type: 'success', title: 'Categoria Adicionada' }); }; const handleDeleteCategory = (id: string) => { setCategories(categories.filter(c => c.id !== id)); addToast({ type: 'info', title: 'Categoria Removida' }); }; const inputClass = "w-full p-3 bg-white border border-slate-200 rounded-xl focus:ring-2 focus:ring-primary-200 outline-none text-slate-800 text-sm"; const labelClass = "block text-xs font-bold text-slate-700 mb-1 uppercase tracking-wide"; return (

Configurações & Personalização

Gerencie dados da empresa, categorias financeiras e preferências.

{/* Tabs */}
{/* ORGANIZATION SETTINGS */} {activeTab === 'company' && (
logoInputRef.current?.click()} className="w-32 h-32 rounded-2xl bg-slate-50 border-2 border-dashed border-slate-200 flex items-center justify-center cursor-pointer overflow-hidden hover:border-primary-300 relative group transition-colors" > {orgForm.logo ? ( Logo ) : (
Upload Logo
)}
setOrgForm({...orgForm, name: e.target.value})} placeholder="Minha Empresa S.A." />
setOrgForm({...orgForm, cnpj: e.target.value})} placeholder="00.000.000/0000-00" />
setOrgForm({...orgForm, phone: e.target.value})} />
setOrgForm({...orgForm, address: e.target.value})} placeholder="Rua, Número, Bairro, Cidade - UF" />
setOrgForm({...orgForm, email: e.target.value})} />
)} {/* CATEGORIES SETTINGS */} {activeTab === 'categories' && (
setNewCategory({...newCategory, name: e.target.value})} placeholder="Ex: Transporte, Freelancers..." />
setNewCategory({...newCategory, type: val})} options={[ { value: 'expense', label: 'Despesa' }, { value: 'income', label: 'Receita' } ]} />

Despesas

{categories.filter(c => c.type === 'expense').map(cat => (
{cat.name}
))}

Receitas

{categories.filter(c => c.type === 'income').map(cat => (
{cat.name}
))}
)} {/* SECURITY SETTINGS */} {activeTab === 'security' && (
User

{currentUser.name}

{currentUser.email}

Notificações

Alertas por Email

Receba resumos semanais.

)}
); };