import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Box, Button, Paper, Typography, Grid, Card, CardContent, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Chip, CircularProgress, Dialog, DialogTitle, DialogContent, DialogActions, TextField, IconButton, } from '@mui/material'; import { ArrowBack, Edit, Delete, Token as TokenIcon, CheckCircle, TrendingUp, } from '@mui/icons-material'; import { companyService } from '../services/companyService'; import { format } from 'date-fns'; function CompanyDetail() { const { id } = useParams(); const navigate = useNavigate(); const [company, setCompany] = useState(null); const [tokens, setTokens] = useState([]); const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [editDialog, setEditDialog] = useState(false); const [deleteDialog, setDeleteDialog] = useState(false); const [formData, setFormData] = useState({ name: '', description: '', industry: '', }); useEffect(() => { loadData(); }, [id]); const loadData = async () => { try { const [companyData, tokensData, statsData] = await Promise.all([ companyService.getById(id), companyService.getTokens(id), companyService.getStats(id), ]); setCompany(companyData.data); setTokens(tokensData.data); setStats(statsData.data); setFormData({ name: companyData.data.name, description: companyData.data.description || '', industry: companyData.data.industry || '', }); } catch (error) { console.error('Failed to load company:', error); alert('Şirket yüklenemedi'); navigate('/companies'); } finally { setLoading(false); } }; const handleUpdate = async () => { try { await companyService.update(id, formData); setEditDialog(false); loadData(); } catch (error) { console.error('Failed to update company:', error); alert('Şirket güncellenemedi'); } }; const handleDelete = async () => { try { await companyService.delete(id); navigate('/companies'); } catch (error) { console.error('Failed to delete company:', error); alert('Şirket silinemedi: Önce tokenları silmelisiniz'); } }; if (loading) { return ( ); } return ( {/* Header */} navigate('/companies')} sx={{ mr: 2 }}> {company.name} {/* Stats Cards */} Toplam Token {stats.total_tokens} Toplam Tıklama {stats.total_clicks} Başarı Oranı {stats.click_rate}% 30 ? 'error' : 'warning'} sx={{ fontSize: 40 }} /> {/* Company Info */} Şirket Bilgileri Sektör {company.industry || 'Belirtilmemiş'} Oluşturulma Tarihi {format(new Date(company.created_at), 'dd/MM/yyyy HH:mm')} {company.description && ( Açıklama {company.description} )} {/* Tokens Table */} Tokenlar ({tokens.length}) Email Çalışan Durum Tıklama Tarih {tokens.length === 0 ? ( Henüz token oluşturulmamış ) : ( tokens.map((token) => ( {token.target_email} {token.employee_name || '-'} {token.click_count}× {format(new Date(token.created_at), 'dd/MM/yyyy HH:mm')} )) )}
{/* Edit Dialog */} setEditDialog(false)} maxWidth="sm" fullWidth> Şirket Düzenle setFormData({ ...formData, name: e.target.value })} /> setFormData({ ...formData, description: e.target.value })} /> setFormData({ ...formData, industry: e.target.value })} /> {/* Delete Confirmation */} setDeleteDialog(false)}> Şirketi Sil? {company.name} şirketini silmek istediğinizden emin misiniz? Bu işlem geri alınamaz. {tokens.length > 0 && ( ⚠️ Bu şirkete ait {tokens.length} token var. Önce tokenları silmelisiniz. )}
); } export default CompanyDetail;