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}
}
onClick={() => setEditDialog(true)}
sx={{ mr: 1 }}
>
Düzenle
}
color="error"
onClick={() => setDeleteDialog(true)}
>
Sil
{/* 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 */}
{/* Delete Confirmation */}
);
}
export default CompanyDetail;