ahs-cti 0.0.22 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "ahs-cti",
3
3
  "description": "Call Control SDK for Web RTC",
4
- "version": "0.0.22",
4
+ "version": "0.0.23",
5
5
  "author": "CTI SDK Team",
6
6
  "license": "MIT",
7
7
  "main": "./dist/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/pages/agentDetailReport/index.tsx","../call-control-sdk/lib/pages/common/components/BreakSessionsTable.tsx","../node_modules/@mui/icons-material/Visibility.mjs","../call-control-sdk/lib/pages/agentDetailReport/useAgentDetailReport.ts"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from \"react\";\r\n\r\nimport {\r\n Box, Typography, Table, TableBody, TableCell, TableContainer,\r\n TableHead, TableRow, TablePagination, IconButton, Chip,\r\n CircularProgress, Alert, Dialog, DialogTitle, DialogContent,\r\n} from \"@mui/material\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport BreakSessionsTable from \"../common/components/BreakSessionsTable\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport {\r\n BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip as RTooltip,\r\n PieChart, Pie, Cell, Legend, ResponsiveContainer, LabelList,\r\n} from \"recharts\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport DateRangePicker from \"../common/components/DateRangePicker\";\r\nimport { getAgentDetailReport, getCdrReport, getRecordingByCall, getAgentBreakSessions, exportAgentBreakSessionsToExcel } from \"./useAgentDetailReport\";\r\nimport { deepFindArray } from \"../../services/axios\";\r\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\r\nimport type {\r\n AgentDetailReportResponse,\r\n AgentDetailProfile,\r\n BreakSessionResponse,\r\n CdrRecordResponse,\r\n CdrReportParams,\r\n ReportData,\r\n} from \"./types\";\r\nimport PageHeader from \"../common/components/PageHeader\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\n\r\nconst C = {\r\n navy: \"#0d2a56\", blue: \"#1565c8\", green: \"#0a9a62\", amber: \"#c47c00\",\r\n red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\",\r\n bg: \"#fff\", surface: \"#fff\", s2: \"#f7f9fc\", s3: \"#eef2f7\",\r\n b1: \"rgba(20,50,100,.07)\", b2: \"rgba(20,50,100,.13)\",\r\n t1: \"#0d1e35\", t2: \"#364f6e\", t3: \"#7a93b5\", t4: \"#bccad9\",\r\n blt: \"#e8f0fc\", glt: \"#e4f6ef\", alt: \"#fdf3e0\", rlt: \"#fde8e8\",\r\n plt: \"#f0eafa\", tlt: \"#e3f4f7\",\r\n};\r\n\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\nconst monoSx = { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600 };\r\nconst QUEUE_COLORS = [C.blue, C.green, C.purple, C.amber, C.teal, C.red, C.navy];\r\n\r\n// Fallback break-duration formatter when the API omits durationFormatted.\r\nfunction fmtSecsDetail(s: number): string {\r\n if (!s || s <= 0) return \"00:00:00\";\r\n const h = Math.floor(s / 3600), m = Math.floor((s % 3600) / 60), sc = Math.floor(s % 60);\r\n return [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\n\r\nfunction StatCard({ value, label, color, onClick }: { value: string | number; label: string; color: string; onClick?: () => void }) {\r\n return (\r\n <Box\r\n onClick={onClick}\r\n sx={{\r\n px: 1.5, py: 1.2,\r\n borderRadius: \"10px\",\r\n backgroundColor: \"#fafafa\",\r\n border: \"1px solid #e0e0e0\",\r\n borderLeftWidth: \"3px\",\r\n borderLeftStyle: \"solid\",\r\n borderLeftColor: color,\r\n ...(onClick && {\r\n cursor: \"pointer\",\r\n transition: \"box-shadow .15s, border-color .15s\",\r\n \"&:hover\": { boxShadow: \"0 2px 10px rgba(20,50,100,.12)\", borderColor: color },\r\n }),\r\n }}\r\n >\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 0.3 }}>\r\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\" }}>\r\n {label}\r\n </Typography>\r\n {onClick && (\r\n <Tooltip title=\"View break sessions\" arrow>\r\n <VisibilityIcon sx={{ fontSize: 15, color }} />\r\n </Tooltip>\r\n )}\r\n </Box>\r\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\" }}>\r\n {value}\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction StatusChip({ status }: { status: string }) {\r\n const s = status?.toLowerCase();\r\n const isAns = s === \"answered\";\r\n const isAband = s === \"abandoned\";\r\n return (\r\n <Chip label={status || \"—\"} size=\"small\" sx={{\r\n fontSize: 11, fontWeight: 700, height: 22,\r\n background: isAns ? C.glt : isAband ? C.alt : C.rlt,\r\n color: isAns ? C.green : isAband ? C.amber : C.red,\r\n border: `1px solid ${isAns ? \"rgba(10,154,98,.2)\" : isAband ? \"rgba(196,124,0,.2)\" : \"rgba(204,42,42,.2)\"}`,\r\n fontFamily: \"'JetBrains Mono', monospace\",\r\n }} />\r\n );\r\n}\r\n\r\nfunction CallTypeChip({ type }: { type: string }) {\r\n const isIn = type?.toLowerCase() === \"inbound\";\r\n return (\r\n <Chip label={type || \"—\"} size=\"small\" sx={{\r\n fontSize: 11, fontWeight: 700, height: 22,\r\n background: isIn ? C.glt : C.blt,\r\n color: isIn ? C.green : C.blue,\r\n border: `1px solid ${isIn ? \"rgba(10,154,98,.2)\" : \"rgba(21,101,200,.2)\"}`,\r\n fontFamily: \"'JetBrains Mono', monospace\",\r\n }} />\r\n );\r\n}\r\n\r\nfunction RecordingCell({ callUuid, recordingPath }: { callUuid: string; recordingPath: string | null }) {\r\n const [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n\r\n if (!recordingPath) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n <Tooltip title=\"No recording available\">\r\n <span>\r\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n <PlayArrowIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title=\"No recording available\">\r\n <span>\r\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n </Box>\r\n );\r\n }\r\n\r\n const handlePlay = async () => {\r\n if (audioUrl) return;\r\n try {\r\n setLoading(true);\r\n setError(false);\r\n const blob = await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n setAudioUrl(url);\r\n } catch {\r\n setError(true);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleDownload = async () => {\r\n try {\r\n const blob = audioUrl\r\n ? await fetch(audioUrl).then((r) => r.blob())\r\n : await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = `recording_${callUuid}.wav`;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n } catch {\r\n /* ignore */\r\n }\r\n };\r\n\r\n if (audioUrl) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <audio\r\n controls\r\n autoPlay\r\n src={audioUrl}\r\n onEnded={() => { if (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl); setAudioUrl(null); }}\r\n style={{ width: 140, height: 30 }}\r\n />\r\n <Tooltip title=\"Download\">\r\n <IconButton size=\"small\" onClick={handleDownload} sx={{ color: C.blue, p: 0.4 }}>\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n <Tooltip title={error ? \"Recording unavailable\" : \"Play\"}>\r\n <span>\r\n <IconButton size=\"small\" onClick={handlePlay} disabled={loading || error} sx={{ color: C.green, p: 0.4 }}>\r\n {loading ? <CircularProgress size={14} /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title={error ? \"Recording unavailable\" : \"Download\"}>\r\n <span>\r\n <IconButton size=\"small\" onClick={handleDownload} disabled={loading || error} sx={{ color: C.blue, p: 0.4 }}>\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n {error && <Chip label=\"No File\" size=\"small\" sx={{ fontSize: \"0.6rem\", height: 18 }} />}\r\n </Box>\r\n );\r\n}\r\n\r\nconst cdrHeadSx = {\r\n bgcolor: \"#f1f1f1\", color: \"#333\", fontWeight: 600,\r\n whiteSpace: \"nowrap\" as const, fontSize: \"14px\",\r\n py: 0.7, px: 1,\r\n};\r\n\r\nexport interface AgentDetailReportProps {\r\n agentRow?: ReportData | null;\r\n onBack?: () => void;\r\n from?: \"REPORTS_LIST\" | string;\r\n initialStartDate?: Dayjs | null;\r\n initialEndDate?: Dayjs | null;\r\n initialQuickRange?: string;\r\n}\r\n\r\nfunction AgentDetailReportContent({ agentRow: propAgentRow, onBack, from, initialStartDate, initialEndDate, initialQuickRange }: AgentDetailReportProps = {}) {\r\n const agentRow: ReportData | null = propAgentRow || null;\r\n const isFromReportsList = from === \"REPORTS_LIST\";\r\n const agentIdFromRow = isFromReportsList\r\n ? agentRow?.agentDetails?.agentId || \"\"\r\n : sdkStateManager.getState().agentId || agentRow?.agentDetails?.agentId || \"\";\r\n\r\n const [quickRange, setQuickRange] = useState<string>(initialQuickRange || \"today\");\r\n const [startDate, setStartDate] = useState<Dayjs | null>(initialStartDate ?? dayjs());\r\n const [endDate, setEndDate] = useState<Dayjs | null>(initialEndDate ?? dayjs());\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const syncFilterToUrl = (_sd: Dayjs, _ed: Dayjs, _range: string) => { /* no-op in SDK context */ };\r\n\r\n const [activeTab, setActiveTab] = useState(0);\r\n\r\n const [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\r\n const [detailLoading, setDetailLoading] = useState(!isFromReportsList);\r\n const [detailError, setDetailError] = useState(\"\");\r\n\r\n const [cdrRecords, setCdrRecords] = useState<CdrRecordResponse[]>([]);\r\n const [cdrTotal, setCdrTotal] = useState(0);\r\n const [cdrPage, setCdrPage] = useState(0);\r\n const [cdrPageSize, setCdrPageSize] = useState(10);\r\n const [cdrLoading, setCdrLoading] = useState(false);\r\n const [cdrError, setCdrError] = useState(\"\");\r\n\r\n // Break sessions dialog state (opened from the \"Breaks Taken\" stat)\r\n const [breaksDialogOpen, setBreaksDialogOpen] = useState(false);\r\n const [breakSessions, setBreakSessions] = useState<BreakSessionResponse[]>([]);\r\n const [breaksLoading, setBreaksLoading] = useState(false);\r\n\r\n const profile: AgentDetailProfile | null = detail?.profile || null;\r\n const agentName = profile?.fullName || agentRow?.agentDetails?.fullName || \"Unknown Agent\";\r\n const showInitialSpinner = !isFromReportsList && detailLoading && !profile && !agentRow?.agentDetails?.fullName;\r\n\r\n const setQuick = (range: string) => {\r\n setQuickRange(range);\r\n const today = dayjs();\r\n let sd: Dayjs = today;\r\n const ed: Dayjs = today;\r\n if (range === \"week\") sd = today.startOf(\"week\");\r\n else if (range === \"month\") sd = today.startOf(\"month\");\r\n setStartDate(sd);\r\n setEndDate(ed);\r\n syncFilterToUrl(sd, ed, range);\r\n };\r\n\r\n const fetchDetailFn = async (sd: Dayjs, ed: Dayjs) => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n setDetailLoading(true);\r\n setDetailError(\"\");\r\n const res = await getAgentDetailReport(agentIdFromRow, {\r\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n setDetail(res);\r\n } catch (err: any) {\r\n setDetailError(err?.message || \"Failed to load agent detail\");\r\n } finally {\r\n setDetailLoading(false);\r\n }\r\n };\r\n\r\n const fetchCdrFn = async (sd: Dayjs, ed: Dayjs, page: number, pageSize: number) => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n setCdrLoading(true);\r\n setCdrError(\"\");\r\n const params: CdrReportParams = {\r\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n search: agentIdFromRow,\r\n page: page + 1,\r\n pageSize: pageSize,\r\n };\r\n const res: any = await getCdrReport(params);\r\n setCdrRecords(deepFindArray<CdrRecordResponse>(res, [\"data\", \"records\"]));\r\n setCdrTotal(res?.records?.total ?? res?.total ?? res?.data?.total ?? 0);\r\n } catch (err: any) {\r\n setCdrError(err?.message || \"Failed to load call history\");\r\n } finally {\r\n setCdrLoading(false);\r\n }\r\n };\r\n\r\n /* ── Break sessions dialog ── */\r\n const loadBreakSessions = useCallback(async () => {\r\n if (!agentIdFromRow) return;\r\n setBreaksLoading(true);\r\n try {\r\n const sd = startDate ?? dayjs();\r\n const ed = endDate ?? dayjs();\r\n const data = await getAgentBreakSessions(agentIdFromRow, {\r\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.isSame(dayjs(), \"day\")\r\n ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n setBreakSessions(Array.isArray(data) ? data : []);\r\n } catch {\r\n setBreakSessions([]);\r\n } finally {\r\n setBreaksLoading(false);\r\n }\r\n }, [agentIdFromRow, startDate, endDate]);\r\n\r\n const openBreaksDialog = async () => {\r\n if (!agentIdFromRow) return;\r\n setBreaksDialogOpen(true);\r\n await loadBreakSessions();\r\n };\r\n\r\n // Only toggle the dialog — keep breakSessions so the inline table (which\r\n // shares this state) isn't wiped when the dialog closes.\r\n const closeBreaksDialog = () => {\r\n setBreaksDialogOpen(false);\r\n };\r\n\r\n /* ── Manual refresh / search (re-fetch with the current date range) ── */\r\n const handleSearch = (sd?: Dayjs | null, ed?: Dayjs | null) => {\r\n const fromDate = sd ?? startDate;\r\n const toDate = ed ?? endDate;\r\n if (!fromDate || !toDate) return;\r\n fetchDetailFn(fromDate, toDate);\r\n setCdrPage(0);\r\n if (activeTab === 1) fetchCdrFn(fromDate, toDate, 0, cdrPageSize);\r\n };\r\n\r\n // Auto-fetch the detail report whenever the agent or date range changes.\r\n useEffect(() => {\r\n if (agentIdFromRow && startDate && endDate) fetchDetailFn(startDate, endDate);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [agentIdFromRow, startDate, endDate]);\r\n\r\n // Fetch CDR records on tab switch, pagination, or date-range change.\r\n useEffect(() => {\r\n if (activeTab === 1 && startDate && endDate) {\r\n fetchCdrFn(startDate, endDate, cdrPage, cdrPageSize);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeTab, cdrPage, cdrPageSize, startDate, endDate]);\r\n\r\n // Load break sessions inline whenever the Break Details tab is active.\r\n useEffect(() => {\r\n if (activeTab === 2 && agentIdFromRow && startDate && endDate) loadBreakSessions();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeTab, agentIdFromRow, startDate, endDate]);\r\n\r\n const hourlyCallData = useMemo(() => {\r\n return (detail?.hourlyCalls || []).map((h) => ({\r\n hour: String(h.hourOfDay).padStart(2, \"0\"),\r\n answered: h.answeredCalls,\r\n abandoned: h.missedCalls,\r\n }));\r\n }, [detail]);\r\n\r\n const timeUtilData = useMemo(() => {\r\n const tu = detail?.timeUtilisation;\r\n if (!tu) return [];\r\n const total = tu.totalLoginSeconds || 1;\r\n return [\r\n { name: \"On Call / Handle\", value: tu.onCallSeconds, pct: (tu.onCallSeconds / total) * 100, formatted: tu.onCallFormatted, color: C.blue },\r\n { name: \"Idle\", value: tu.idleSeconds, pct: (tu.idleSeconds / total) * 100, formatted: tu.idleFormatted, color: \"#e8a0a0\" },\r\n { name: \"Break\", value: tu.breakSeconds, pct: (tu.breakSeconds / total) * 100, formatted: tu.breakFormatted, color: C.amber },\r\n ];\r\n }, [detail]);\r\n\r\n const talkDurationBuckets = useMemo(() => {\r\n const items = [...(detail?.talkDistribution || [])].sort((a, b) => a.bucketOrder - b.bucketOrder);\r\n const total = items.reduce((s, b) => s + (b.callCount || 0), 0);\r\n return items.map((b) => ({\r\n bucket: b.bucketLabel,\r\n count: b.callCount,\r\n minSeconds: b.minSeconds,\r\n maxSeconds: b.maxSeconds,\r\n pct: total > 0 ? (b.callCount / total) * 100 : 0,\r\n }));\r\n }, [detail]);\r\n\r\n const talkDurationTotal = useMemo(\r\n () => talkDurationBuckets.reduce((s, b) => s + (b.count || 0), 0),\r\n [talkDurationBuckets],\r\n );\r\n\r\n const queuePieData = useMemo(() => {\r\n return (detail?.callsByQueue || []).map((q, i) => ({\r\n name: q.queueName,\r\n value: q.callCount,\r\n pctOfTotal: q.pctOfTotal,\r\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n }));\r\n }, [detail]);\r\n\r\n const queueMetrics = useMemo(() => {\r\n const items = detail?.queueMetrics || [];\r\n const grandTotal = items.reduce((sum, q) => sum + q.totalCalls, 0);\r\n return items.map((q, i) => ({\r\n ...q,\r\n pctOfTotal: grandTotal > 0 ? (q.totalCalls / grandTotal) * 100 : 0,\r\n answerRate: q.totalCalls > 0 ? (q.answeredCalls / q.totalCalls) * 100 : 0,\r\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n }));\r\n }, [detail]);\r\n\r\n const hourlyChartTitle = useMemo(() => {\r\n if (quickRange === \"today\") return \"Hourly Call Volume — Today\";\r\n if (quickRange === \"month\") return `Hourly Call Volume — ${dayjs().format(\"MMMM YYYY\")}`;\r\n if (quickRange === \"week\") return \"Hourly Call Volume — This Week\";\r\n if (startDate && endDate) {\r\n if (startDate.isSame(endDate, \"day\")) return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")}`;\r\n return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")} to ${endDate.format(\"DD MMM YYYY\")}`;\r\n }\r\n return \"Hourly Call Volume\";\r\n }, [quickRange, startDate, endDate]);\r\n\r\n const handleBack = useCallback(() => {\r\n onBack?.();\r\n }, [onBack]);\r\n\r\n if (!agentIdFromRow) {\r\n return (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <Typography sx={{ color: C.t3, mb: 2 }}>No agent selected.</Typography>\r\n {isFromReportsList && (\r\n <AppButton onClick={handleBack}>\r\n Go Back\r\n </AppButton>\r\n )}\r\n </Box>\r\n );\r\n }\r\n\r\n if (showInitialSpinner) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minHeight: 400 }}>\r\n <CircularProgress size={36} />\r\n </Box>\r\n );\r\n }\r\n\r\n const tabs = [\"Overview\", \"Call History\", \"Break Details\"];\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n <Box sx={{ background: C.bg, minHeight: \"100vh\" }}>\r\n <PageHeader\r\n title={agentName}\r\n showBack={isFromReportsList}\r\n onBack={handleBack}\r\n />\r\n\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\", pb: 1.5, px: 2 }}>\r\n <DateRangePicker\r\n showTime={false}\r\n startDate={startDate}\r\n endDate={endDate}\r\n onStartChange={(d) => { setStartDate(d); setQuickRange(\"custom\"); if (d && endDate) syncFilterToUrl(d, endDate, \"custom\"); }}\r\n onEndChange={(d) => { setEndDate(d); setQuickRange(\"custom\"); if (startDate && d) syncFilterToUrl(startDate, d, \"custom\"); }}\r\n />\r\n <AppButton variant={quickRange === \"today\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"today\")} sx={{ whiteSpace: \"nowrap\" }}>Today</AppButton>\r\n <AppButton variant={quickRange === \"week\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"week\")} sx={{ whiteSpace: \"nowrap\" }}>This Week</AppButton>\r\n <AppButton variant={quickRange === \"month\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"month\")} sx={{ whiteSpace: \"nowrap\" }}>This Month</AppButton>\r\n </Box>\r\n\r\n <Box sx={{ py: 2, px: 2, position: \"relative\" }}>\r\n {detailLoading && (\r\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(240,244,248,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 10 }}>\r\n <CircularProgress />\r\n </Box>\r\n )}\r\n\r\n {detailError && <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setDetailError(\"\")}>{detailError}</Alert>}\r\n\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", sm: \"repeat(3, 1fr)\", md: \"repeat(5, 1fr)\" }, gap: 1.5, mb: 2 }}>\r\n {[\r\n { v: profile?.totalCalls ?? 0, l: \"Total Calls\", c: C.navy },\r\n { v: profile?.answeredCalls ?? 0, l: \"Answered\", c: C.green },\r\n { v: profile?.missedCalls ?? 0, l: \"Missed\", c: C.red },\r\n { v: profile?.avgAhtFormatted || \"00:00:00\", l: \"Avg AHT\", c: C.purple },\r\n { v: `${(profile?.answerRate ?? 0).toFixed(1)}%`, l: \"Answer Rate\", c: C.green },\r\n { v: profile?.loginDurationFormatted || \"00:00:00\", l: \"Login Duration\", c: C.blue },\r\n { v: profile?.productionFormatted || \"00:00:00\", l: \"Production\", c: C.blue },\r\n { v: profile?.handleTimeFormatted || \"00:00:00\", l: \"Handle Time\", c: C.purple },\r\n { v: profile?.breakTimeFormatted || \"00:00:00\", l: \"Break Time\", c: C.amber },\r\n { v: `${(profile?.adherencePct ?? 0).toFixed(1)}%`, l: `Adherence${profile?.adherenceGrade ? ` (${profile.adherenceGrade})` : \"\"}`, c: C.teal },\r\n ].map((kpi, i) => (\r\n <Box key={i} sx={{\r\n px: 1.5, py: 1.2,\r\n borderRadius: \"10px\",\r\n backgroundColor: \"#fafafa\",\r\n borderLeft: `3px solid ${kpi.c}`,\r\n border: \"1px solid #e0e0e0\",\r\n borderLeftWidth: \"3px\",\r\n borderLeftStyle: \"solid\",\r\n borderLeftColor: kpi.c,\r\n }}>\r\n <Typography sx={{\r\n fontFamily: \"poppins, Arial, sans-serif\",\r\n fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3,\r\n }}>\r\n {kpi.l}\r\n </Typography>\r\n <Typography sx={{\r\n fontFamily: \"poppins, Arial, sans-serif\",\r\n fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\",\r\n }}>\r\n {kpi.v}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n <Box sx={{ display: \"flex\", alignItems: { xs: \"flex-start\", sm: \"center\" }, justifyContent: \"space-between\", flexDirection: { xs: \"column\", sm: \"row\" }, gap: 1, borderBottom: `2px solid ${C.b1}`, mb: 2 }}>\r\n <Box sx={{ display: \"flex\", gap: 0.5, flexWrap: \"wrap\" }}>\r\n {tabs.map((tab, idx) => (\r\n <Box key={tab} onClick={() => setActiveTab(idx)}\r\n sx={{\r\n px: 2, py: 1, fontSize: 13, fontWeight: 600, cursor: \"pointer\",\r\n color: activeTab === idx ? C.blue : C.t3,\r\n borderBottom: `2px solid ${activeTab === idx ? C.blue : \"transparent\"}`,\r\n mb: \"-2px\", transition: \"all .15s\", \"&:hover\": { color: C.t1 },\r\n }}>\r\n {tab}\r\n </Box>\r\n ))}\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: \"-2px\" }}>\r\n <AppButton\r\n size=\"small\"\r\n startIcon={<RefreshIcon />}\r\n disabled={detailLoading || cdrLoading}\r\n onClick={() => handleSearch()}\r\n >\r\n Refresh\r\n </AppButton>\r\n {activeTab !== 2 && (\r\n <AppButton size=\"small\" startIcon={<SearchIcon />} onClick={() => handleSearch()}>\r\n Search\r\n </AppButton>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {activeTab === 0 && (\r\n <Box>\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2, mb: 2 }}>\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>{hourlyChartTitle}</Typography>\r\n <Chip label={agentName} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.blt, color: C.blue, border: `1px solid rgba(21,101,200,.2)` }} />\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <BarChart data={hourlyCallData} barGap={1}>\r\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n <XAxis dataKey=\"hour\" tick={{ fontSize: 11, fill: C.t3 }} />\r\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\r\n <RTooltip labelFormatter={(label) => `${String(label).padStart(2, \"0\")}:00`} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\r\n <Legend wrapperStyle={{ fontSize: 11 }} />\r\n <Bar dataKey=\"answered\" name=\"Answered\" fill={C.blue} radius={[3, 3, 0, 0]} />\r\n <Bar dataKey=\"abandoned\" name=\"Abandoned\" fill={C.red} radius={[3, 3, 0, 0]} />\r\n </BarChart>\r\n </ResponsiveContainer>\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Time Utilisation Breakdown</Typography>\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n {timeUtilData.length > 0 ? (\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <PieChart>\r\n <Pie data={timeUtilData} cx=\"50%\" cy=\"50%\" innerRadius={60} outerRadius={95} dataKey=\"value\" nameKey=\"name\" minAngle={8}>\r\n {timeUtilData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\r\n </Pie>\r\n <RTooltip formatter={(_val, name, entry) => [`${(entry as any).payload.formatted} (${(entry as any).payload.pct.toFixed(1)}%)`, name]} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\r\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\r\n </PieChart>\r\n </ResponsiveContainer>\r\n ) : (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\", mb: 2 }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Talk Duration Distribution</Typography>\r\n <Chip label={`${talkDurationTotal} call${talkDurationTotal === 1 ? \"\" : \"s\"}`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.glt, color: C.green, border: `1px solid rgba(10,154,98,.2)` }} />\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n {talkDurationBuckets.length > 0 ? (\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <BarChart data={talkDurationBuckets} margin={{ top: 16, right: 16, left: 0, bottom: 20 }}>\r\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n <XAxis dataKey=\"bucket\" tick={{ fontSize: 11, fill: C.t3 }} label={{ value: \"Talking Duration\", position: \"insideBottom\", offset: -5, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\r\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} label={{ value: \"Call Count\", angle: -90, position: \"insideLeft\", offset: 10, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\r\n <RTooltip\r\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n labelFormatter={(label, payload) => {\r\n const p = payload?.[0]?.payload as { minSeconds?: number; maxSeconds?: number } | undefined;\r\n if (!p) return String(label);\r\n return `${label} (${p.minSeconds}–${p.maxSeconds}s)`;\r\n }}\r\n formatter={(val, _name, entry) => {\r\n const pct = (entry as any)?.payload?.pct;\r\n return [`${val} call${val === 1 ? \"\" : \"s\"}${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, \"Calls\"];\r\n }}\r\n />\r\n <Bar dataKey=\"count\" name=\"Calls\" fill={C.teal} radius={[4, 4, 0, 0]}>\r\n <LabelList dataKey=\"count\" position=\"top\" style={{ fontSize: 11, fontWeight: 700, fill: C.t1 }} />\r\n </Bar>\r\n </BarChart>\r\n </ResponsiveContainer>\r\n ) : (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2 }}>\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Calls by Queue</Typography>\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n {queuePieData.length > 0 ? (\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <PieChart>\r\n <Pie data={queuePieData} cx=\"50%\" cy=\"50%\" outerRadius={90} dataKey=\"value\" nameKey=\"name\">\r\n {queuePieData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\r\n </Pie>\r\n <RTooltip\r\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n formatter={(val, name, entry) => {\r\n const pct = (entry as any)?.payload?.pctOfTotal;\r\n return [`${val} calls${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, name];\r\n }}\r\n />\r\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\r\n </PieChart>\r\n </ResponsiveContainer>\r\n ) : (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No queue data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Queue Performance Metrics</Typography>\r\n </Box>\r\n <Box sx={{ p: 2 }}>\r\n {queueMetrics.length > 0 ? queueMetrics.map((q) => (\r\n <Box key={q.queueName} sx={{ mb: 2, \"&:last-child\": { mb: 0 } }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 0.3 }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n <Box sx={{ width: 10, height: 10, borderRadius: \"50%\", background: q.color, flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: 13, fontWeight: 700, color: C.t1 }}>{q.queueName}</Typography>\r\n </Box>\r\n <Typography sx={{ ...monoSx, fontSize: 13, fontWeight: 800, color: q.color }}>\r\n {q.totalCalls} calls\r\n <Typography component=\"span\" sx={{ ...monoSx, color: C.t3, ml: 0.5 }}>\r\n ({q.answeredCalls} ans / {q.missedCalls} miss)\r\n </Typography>\r\n </Typography>\r\n </Box>\r\n <Box sx={{ height: 6, background: C.s3, borderRadius: 3, overflow: \"hidden\", mb: 0.3 }}>\r\n <Box sx={{ height: \"100%\", width: `${q.pctOfTotal ?? 0}%`, background: q.color, borderRadius: 3 }} />\r\n </Box>\r\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", columnGap: 1.5, rowGap: 0.2 }}>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>{(q.pctOfTotal ?? 0).toFixed(0)}% of total</Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Ans: {(q.answerRate ?? 0).toFixed(0)}%</Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Talk: <span style={{ ...monoSx, color: C.t2 }}>{q.avgTalkFormatted}</span></Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Hold: <span style={{ ...monoSx, color: C.t2 }}>{q.avgHoldFormatted}</span></Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Wrap: <span style={{ ...monoSx, color: C.t2 }}>{q.avgWrapupFormatted}</span></Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>AHT: <span style={{ ...monoSx, color: C.t2 }}>{q.avgAhtFormatted}</span></Typography>\r\n </Box>\r\n </Box>\r\n )) : (\r\n <Box sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No queue data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {activeTab === 1 && (\r\n <Box sx={{ borderRadius: \"8px\", border: \"1px solid #e0e7ef\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Call History</Typography>\r\n <Chip label={`${cdrTotal} records`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.s2, color: C.t3, border: `1px solid ${C.b2}` }} />\r\n </Box>\r\n </Box>\r\n {cdrError && <Alert severity=\"error\" sx={{ mx: 2, mt: 1 }} onClose={() => setCdrError(\"\")}>{cdrError}</Alert>}\r\n <TableContainer sx={{ position: \"relative\" }}>\r\n {cdrLoading && (\r\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(255,255,255,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 5 }}>\r\n <CircularProgress size={28} />\r\n </Box>\r\n )}\r\n <Table size=\"small\" sx={{\r\n minWidth: 1400,\r\n \"& .MuiTableCell-root\": { fontSize: \"0.75rem\", borderBottom: \"1px solid #eef1f6\", py: 0.6, px: 1 },\r\n }}>\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n \"Phone Number\", \"Call Start\", \"Call Type\", \"Status\", \"Queue\", \"Extension\",\r\n \"Talk Duration\", \"Hold Duration\", \"Ringing Duration\", \"Wrapup Duration\",\r\n \"Disposition\", \"Transferred\", \"Recording\",\r\n ].map((label) => (\r\n <TableCell key={label} sx={cdrHeadSx}>{label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {cdrRecords.map((row, idx) => (\r\n <TableRow key={row.callUuid || idx} hover sx={{\r\n backgroundColor: \"#fff\",\r\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n }}>\r\n <TableCell sx={{ fontWeight: 600, color: C.navy, fontSize: \"0.75rem\" }}>{row.phoneNumber || \"\"}</TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.callStartTime ? dayjs(row.callStartTime).format(\"DD MMM YYYY hh:mm A\") : \"\"}\r\n </TableCell>\r\n <TableCell><CallTypeChip type={row.callType || \"\"} /></TableCell>\r\n <TableCell><StatusChip status={row.callStatus || \"\"} /></TableCell>\r\n <TableCell>\r\n {row.queueName\r\n ? <Chip label={row.queueName} size=\"small\" sx={{ backgroundColor: \"#f0ebfa\", color: C.purple, fontWeight: 500, fontSize: \"0.67rem\", height: 22 }} />\r\n : \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.extension || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 600, color: C.blue, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.talkDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 500, color: C.amber, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.holdDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.ringingDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 500, color: C.purple, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.wrapupDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.disposition || \"\"}</TableCell>\r\n <TableCell>\r\n {row.wasTransferred\r\n ? <Chip label=\"Yes\" size=\"small\" sx={{ backgroundColor: \"#e6f7ef\", color: C.green, fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />\r\n : <Chip label=\"No\" size=\"small\" sx={{ backgroundColor: \"transparent\", color: \"#6b7b8d\", fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />}\r\n </TableCell>\r\n <TableCell>\r\n {row.callUuid ? <RecordingCell callUuid={row.callUuid} recordingPath={row.recordingPath ?? null} /> : \"\"}\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n {!cdrLoading && cdrRecords.length === 0 && (\r\n <TableRow><TableCell colSpan={13} sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No call records found</TableCell></TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n <TablePagination\r\n component=\"div\" count={cdrTotal} page={cdrPage}\r\n onPageChange={(_, p) => setCdrPage(p)} rowsPerPage={cdrPageSize}\r\n onRowsPerPageChange={(e) => { setCdrPageSize(parseInt(e.target.value, 10)); setCdrPage(0); }}\r\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\r\n sx={{ borderTop: \"1px solid #eef1f6\", \"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" }, \"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" } }}\r\n />\r\n </Box>\r\n )}\r\n\r\n {activeTab === 2 && (\r\n <Box>\r\n {/* ═══ BREAK SESSIONS (inline table) ═══ */}\r\n <Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", fontWeight: 700, color: \"#888\", textTransform: \"uppercase\", letterSpacing: 0.8, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n Break Sessions\r\n </Typography>\r\n <AppButton\r\n size=\"small\"\r\n startIcon={<FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n disabled={breaksLoading || breakSessions.length === 0}\r\n onClick={async () => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n await exportAgentBreakSessionsToExcel(agentIdFromRow, {\r\n start_date: (startDate ?? dayjs()).startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: (endDate ?? dayjs()).isSame(dayjs(), \"day\")\r\n ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n : (endDate ?? dayjs()).endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n } catch (err: any) {\r\n setDetailError(err?.message || \"Failed to export breaks Excel\");\r\n }\r\n }}\r\n >\r\n Export to Excel\r\n </AppButton>\r\n </Box>\r\n {breaksLoading ? (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <CircularProgress size={26} sx={{ color: \"var(--primary-color, #1A5F6C)\" }} />\r\n </Box>\r\n ) : breakSessions.length > 0 ? (\r\n <BreakSessionsTable breaks={breakSessions} />\r\n ) : (\r\n <Box sx={{ p: 3, textAlign: \"center\", border: \"1px solid #e4eaf0\", borderRadius: \"10px\", backgroundColor: \"#fff\" }}>\r\n <Typography sx={{ fontFamily: FONT, color: \"#9e9e9e\", fontStyle: \"italic\", fontSize: \"0.82rem\" }}>No breaks found</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {/* ─── BREAK SESSIONS DIALOG ─── */}\r\n <Dialog\r\n open={breaksDialogOpen}\r\n onClose={(_e, reason) => { if (reason !== \"backdropClick\") closeBreaksDialog(); }}\r\n maxWidth=\"md\"\r\n fullWidth\r\n PaperProps={{\r\n sx: {\r\n borderRadius: \"12px\",\r\n fontFamily: FONT,\r\n overflow: \"hidden\",\r\n boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\",\r\n maxWidth: 640,\r\n },\r\n }}\r\n >\r\n <DialogTitle\r\n sx={{\r\n fontFamily: FONT,\r\n background: \"linear-gradient(135deg, var(--primary-color-dark, #14505b), var(--primary-color, #1A5F6C))\",\r\n color: \"#fff\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n py: 1.5,\r\n px: 2.5,\r\n }}\r\n >\r\n <Box>\r\n <Typography variant=\"h6\" sx={{ fontFamily: FONT, fontWeight: 700, fontSize: \"0.95rem\", letterSpacing: \"0.3px\" }}>\r\n Break Sessions\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ fontFamily: FONT, opacity: 0.9, fontSize: \"0.76rem\", mt: 0.3 }}>\r\n {agentName} &bull; {breakSessions.length} break{breakSessions.length !== 1 ? \"s\" : \"\"}\r\n </Typography>\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <AppButton\r\n size=\"small\"\r\n startIcon={<FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n disabled={breaksLoading || breakSessions.length === 0}\r\n onClick={async () => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n await exportAgentBreakSessionsToExcel(agentIdFromRow, {\r\n start_date: (startDate ?? dayjs()).startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: (endDate ?? dayjs()).isSame(dayjs(), \"day\")\r\n ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n : (endDate ?? dayjs()).endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n } catch (err: any) {\r\n setDetailError(err?.message || \"Failed to export breaks Excel\");\r\n }\r\n }}\r\n sx={{ whiteSpace: \"nowrap\" }}\r\n >\r\n Export to Excel\r\n </AppButton>\r\n <IconButton\r\n onClick={closeBreaksDialog}\r\n size=\"small\"\r\n sx={{\r\n color: \"#fff\",\r\n backgroundColor: \"rgba(255,255,255,0.1)\",\r\n \"&:hover\": { backgroundColor: \"rgba(255,255,255,0.2)\" },\r\n }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </DialogTitle>\r\n\r\n <DialogContent sx={{ p: 0, backgroundColor: \"#f8fafb\" }}>\r\n {breaksLoading ? (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <CircularProgress size={28} sx={{ color: \"var(--primary-color, #1A5F6C)\" }} />\r\n </Box>\r\n ) : breakSessions.length > 0 ? (\r\n <Box sx={{ p: 1.5 }}>\r\n <BreakSessionsTable breaks={breakSessions} maxHeight={360} showRemarksStatus={false} />\r\n </Box>\r\n ) : (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <Typography sx={{ fontFamily: FONT, color: \"#9e9e9e\", fontStyle: \"italic\", fontSize: \"0.82rem\" }}>\r\n No breaks found\r\n </Typography>\r\n </Box>\r\n )}\r\n </DialogContent>\r\n </Dialog>\r\n </Box>\r\n </LocalizationProvider>\r\n );\r\n}\r\n\r\nconst AgentDetailReport: React.FC<AgentDetailReportProps> = (props) => (\r\n <SDKProvider>\r\n <AgentDetailReportContent {...props} />\r\n </SDKProvider>\r\n);\r\n\r\nexport default AgentDetailReport;\r\n","import { Typography, Chip, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from \"@mui/material\";\r\nimport dayjs from \"dayjs\";\r\nimport type { BreakSessionResponse } from \"../../agentDetailReport/types\";\r\n\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\nconst C = { green: \"#0a9a62\", red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\", plt: \"#f0eafa\", glt: \"#e4f6ef\", tlt: \"#e3f4f7\" };\r\n\r\n// Fallback formatter when the API omits durationFormatted but gives seconds.\r\nfunction fmtDur(s: number): string {\r\n if (!s || s <= 0) return \"\";\r\n const h = Math.floor(s / 3600), m = Math.floor((s % 3600) / 60), sc = Math.floor(s % 60);\r\n return [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\nfunction fmtDateTime(v?: string | null): string {\r\n return v ? dayjs(v).format(\"DD MMM YYYY h:mm:ss A\") : \"\";\r\n}\r\nfunction fmtDuration(b: BreakSessionResponse): string {\r\n return b.durationFormatted || (b.durationSeconds != null ? fmtDur(b.durationSeconds) : \"\");\r\n}\r\n\r\n/**\r\n * Break sessions rendered as a table — shared by the agent-detail Break Details\r\n * tab, its dialog, and the performance-tab break drill-down so the layout stays\r\n * identical everywhere. Null / missing values render as empty cells.\r\n */\r\nexport default function BreakSessionsTable({ breaks, maxHeight = 380, showRemarksStatus = true }: { breaks: BreakSessionResponse[]; maxHeight?: number; showRemarksStatus?: boolean }) {\r\n return (\r\n <TableContainer sx={{ maxHeight, backgroundColor: \"#fff\", border: \"1px solid #e4eaf0\", borderRadius: \"10px\" }}>\r\n <Table stickyHeader size=\"small\" sx={{ \"& td, & th\": { fontFamily: FONT } }}>\r\n <TableHead>\r\n <TableRow sx={{ \"& th\": { backgroundColor: \"#f0f5f4\", fontWeight: 700, fontSize: \"0.72rem\", color: \"#555\", textTransform: \"uppercase\", letterSpacing: \"0.5px\", borderBottom: \"1px solid #e4eaf0\", py: 0.9 } }}>\r\n <TableCell>Break Type</TableCell>\r\n <TableCell>Started At</TableCell>\r\n <TableCell>Ended At</TableCell>\r\n <TableCell>Duration</TableCell>\r\n {showRemarksStatus && <TableCell>Remarks</TableCell>}\r\n {showRemarksStatus && <TableCell>Status</TableCell>}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {breaks.map((b, i) => (\r\n <TableRow key={b.sessionId ?? i} hover sx={{ \"& td\": { fontSize: \"0.78rem\", borderBottom: \"1px solid #eef1f6\", py: 0.7 } }}>\r\n <TableCell>\r\n {b.breakType\r\n ? <Chip label={b.breakType} size=\"small\" sx={{ fontFamily: FONT, fontSize: \"0.65rem\", fontWeight: 600, height: 18, backgroundColor: C.plt, color: C.purple }} />\r\n : \"\"}\r\n </TableCell>\r\n <TableCell sx={{ color: b.breakStart ? C.green : \"#9e9e9e\", whiteSpace: \"nowrap\" }}>{fmtDateTime(b.breakStart)}</TableCell>\r\n <TableCell sx={{ color: b.breakEnd ? C.red : \"#9e9e9e\", whiteSpace: \"nowrap\" }}>{fmtDateTime(b.breakEnd)}</TableCell>\r\n <TableCell>\r\n {fmtDuration(b)\r\n ? <Typography component=\"span\" sx={{ fontFamily: FONT, fontSize: \"0.72rem\", fontWeight: 700, fontVariantNumeric: \"tabular-nums\", color: C.teal, backgroundColor: C.tlt, borderRadius: \"5px\", px: 0.8, py: 0.25, whiteSpace: \"nowrap\" }}>{fmtDuration(b)}</Typography>\r\n : \"\"}\r\n </TableCell>\r\n {showRemarksStatus && <TableCell sx={{ color: \"#555\" }}>{b.remarks || \"\"}</TableCell>}\r\n {showRemarksStatus && (\r\n <TableCell>\r\n {b.status\r\n ? <Chip label={b.status} size=\"small\" sx={{ fontFamily: FONT, fontSize: \"0.62rem\", fontWeight: 700, height: 18, backgroundColor: b.status === \"Active\" ? C.glt : \"#eef2f7\", color: b.status === \"Active\" ? C.green : \"#555\" }} />\r\n : \"\"}\r\n </TableCell>\r\n )}\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n );\r\n}\r\n\r\nexport { BreakSessionsTable };\r\n","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.mjs\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n d: \"M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5M12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5m0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3\"\n}), 'Visibility');","import { useCallback, useState } from \"react\";\r\nimport axiosInstance, { deepFindArray } from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tAgentDetailReportParams,\r\n\tAgentDetailReportResponse,\r\n\tBreakSessionResponse,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\nfunction buildCdrQs(params: CdrReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) for (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.pageSize) qs.append(\"pageSize\", String(params.pageSize));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\nexport function useAgentDetailReport() {\r\n\tconst [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\r\n\tconst [detailLoading, setDetailLoading] = useState(false);\r\n\tconst [detailError, setDetailError] = useState(\"\");\r\n\r\n\tconst fetchDetail = useCallback(\r\n\t\tasync (agentId: string, params: AgentDetailReportParams) => {\r\n\t\t\tif (!agentId) return;\r\n\t\t\tsetDetailLoading(true);\r\n\t\t\tsetDetailError(\"\");\r\n\t\t\ttry {\r\n\t\t\t\tconst qs = new URLSearchParams();\r\n\t\t\t\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\t\t\t\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\t\t\t\tconst qsStr = qs.toString();\r\n\t\t\t\tconst url = `${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\t\tconst res = await axiosInstance.get<AgentDetailReportResponse>(url);\r\n\t\t\t\tsetDetail(res.data);\r\n\t\t\t} catch (err: any) {\r\n\t\t\t\tsetDetailError(err?.response?.data?.message || err?.message || \"Failed to load agent detail\");\r\n\t\t\t\tsetDetail(null);\r\n\t\t\t} finally {\r\n\t\t\t\tsetDetailLoading(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\treturn { detail, detailLoading, detailError, setDetailError, fetchDetail };\r\n}\r\n\r\nexport function useAgentCdrRecords() {\r\n\tconst [records, setRecords] = useState<CdrReportResponse[\"records\"][\"data\"]>([]);\r\n\tconst [total, setTotal] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchCdr = useCallback(async (params: CdrReportParams) => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<CdrReportResponse>(\r\n\t\t\t\t`${END_POINT.CDR_REPORT}${buildCdrQs(params)}`,\r\n\t\t\t);\r\n\t\t\tsetRecords(res.data?.records?.data || []);\r\n\t\t\tsetTotal(res.data?.records?.total || 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.message || err?.message || \"Failed to load call history\");\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotal(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { records, total, loading, error, setError, fetchCdr };\r\n}\r\n\r\nexport async function fetchRecordingBlob(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\tresponseType: \"blob\",\r\n\t});\r\n\treturn res.data as Blob;\r\n}\r\n\r\nexport async function getAgentDetailReport(\r\n\tagentId: string,\r\n\tparams?: AgentDetailReportParams,\r\n): Promise<AgentDetailReportResponse> {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get<AgentDetailReportResponse>(\r\n\t\t`${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getAgentBreakSessions(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string },\r\n): Promise<BreakSessionResponse[]> {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get(\r\n\t\t`${END_POINT.LOGIN_REPORT_AGENT_BREAKS(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t);\r\n\t// Response may be a bare array or wrapped ({ data: [...] }, { breaks: [...] }, etc.),\r\n\t// and occasionally an unparsed JSON string if Content-Type wasn't application/json.\r\n\tlet body: any = res.data;\r\n\tif (typeof body === \"string\") {\r\n\t\ttry { body = JSON.parse(body); } catch { /* leave as-is */ }\r\n\t}\r\n\treturn deepFindArray<BreakSessionResponse>(body, [\"breaks\", \"sessions\", \"data\"]);\r\n}\r\n\r\nexport async function exportAgentBreakSessionsToExcel(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string },\r\n): Promise<void> {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get(\r\n\t\t`${END_POINT.LOGIN_REPORT_AGENT_BREAKS_EXPORT_EXCEL(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t\t{ responseType: \"blob\" },\r\n\t);\r\n\tconst blobUrl = URL.createObjectURL(new Blob([res.data]));\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = blobUrl;\r\n\ta.download = `break_sessions_${agentId}.xlsx`;\r\n\tdocument.body.appendChild(a);\r\n\ta.click();\r\n\ta.remove();\r\n\tURL.revokeObjectURL(blobUrl);\r\n}\r\n\r\nexport async function getCdrReport(params: CdrReportParams): Promise<CdrReportResponse> {\r\n\tconst qs = buildCdrQs(params);\r\n\tconst res = await axiosInstance.get<CdrReportResponse>(`${END_POINT.CDR_REPORT}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getRecordingByCall(callUuid: string): Promise<Blob> {\r\n\treturn fetchRecordingBlob(callUuid);\r\n}\r\n"],"mappings":"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","names":["useState","useCallback","dayjs","import_dayjs","jsx","jsxs","C","FONT","jsx","C","useState","jsxs","dayjs","_a","_b","_c","_d","_e","useCallback","FONT"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../call-control-sdk/lib/pages/agentDetailReport/index.tsx","../call-control-sdk/lib/pages/common/components/BreakSessionsTable.tsx","../call-control-sdk/lib/pages/agentDetailReport/useAgentDetailReport.ts"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from \"react\";\r\n\r\nimport {\r\n Box, Typography, Table, TableBody, TableCell, TableContainer,\r\n TableHead, TableRow, TablePagination, IconButton, Chip,\r\n CircularProgress, Alert, Dialog, DialogTitle, DialogContent,\r\n} from \"@mui/material\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport BreakSessionsTable from \"../common/components/BreakSessionsTable\";\r\nimport SearchIcon from \"@mui/icons-material/Search\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport PlayArrowIcon from \"@mui/icons-material/PlayArrow\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\r\nimport Tooltip from \"@mui/material/Tooltip\";\r\nimport {\r\n BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip as RTooltip,\r\n PieChart, Pie, Cell, Legend, ResponsiveContainer, LabelList,\r\n} from \"recharts\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport DateRangePicker from \"../common/components/DateRangePicker\";\r\nimport { getAgentDetailReport, getCdrReport, getRecordingByCall, getAgentBreakSessions, exportAgentBreakSessionsToExcel } from \"./useAgentDetailReport\";\r\nimport { deepFindArray } from \"../../services/axios\";\r\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\r\nimport type {\r\n AgentDetailReportResponse,\r\n AgentDetailProfile,\r\n BreakSessionResponse,\r\n CdrRecordResponse,\r\n CdrReportParams,\r\n ReportData,\r\n} from \"./types\";\r\nimport PageHeader from \"../common/components/PageHeader\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\n\r\nconst C = {\r\n navy: \"#0d2a56\", blue: \"#1565c8\", green: \"#0a9a62\", amber: \"#c47c00\",\r\n red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\",\r\n bg: \"#fff\", surface: \"#fff\", s2: \"#f7f9fc\", s3: \"#eef2f7\",\r\n b1: \"rgba(20,50,100,.07)\", b2: \"rgba(20,50,100,.13)\",\r\n t1: \"#0d1e35\", t2: \"#364f6e\", t3: \"#7a93b5\", t4: \"#bccad9\",\r\n blt: \"#e8f0fc\", glt: \"#e4f6ef\", alt: \"#fdf3e0\", rlt: \"#fde8e8\",\r\n plt: \"#f0eafa\", tlt: \"#e3f4f7\",\r\n};\r\n\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\nconst monoSx = { fontFamily: \"'JetBrains Mono', monospace\", fontSize: 11, fontWeight: 600 };\r\nconst QUEUE_COLORS = [C.blue, C.green, C.purple, C.amber, C.teal, C.red, C.navy];\r\n\r\n// Fallback break-duration formatter when the API omits durationFormatted.\r\nfunction fmtSecsDetail(s: number): string {\r\n if (!s || s <= 0) return \"00:00:00\";\r\n const h = Math.floor(s / 3600), m = Math.floor((s % 3600) / 60), sc = Math.floor(s % 60);\r\n return [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\n\r\nfunction StatCard({ value, label, color, onClick }: { value: string | number; label: string; color: string; onClick?: () => void }) {\r\n return (\r\n <Box\r\n onClick={onClick}\r\n sx={{\r\n px: 1.5, py: 1.2,\r\n borderRadius: \"10px\",\r\n backgroundColor: \"#fafafa\",\r\n border: \"1px solid #e0e0e0\",\r\n borderLeftWidth: \"3px\",\r\n borderLeftStyle: \"solid\",\r\n borderLeftColor: color,\r\n ...(onClick && {\r\n cursor: \"pointer\",\r\n transition: \"box-shadow .15s, border-color .15s\",\r\n \"&:hover\": { boxShadow: \"0 2px 10px rgba(20,50,100,.12)\", borderColor: color },\r\n }),\r\n }}\r\n >\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 0.3 }}>\r\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\" }}>\r\n {label}\r\n </Typography>\r\n {onClick && (\r\n <Tooltip title=\"View break sessions\" arrow>\r\n <VisibilityIcon sx={{ fontSize: 15, color }} />\r\n </Tooltip>\r\n )}\r\n </Box>\r\n <Typography sx={{ fontFamily: \"poppins, Arial, sans-serif\", fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\" }}>\r\n {value}\r\n </Typography>\r\n </Box>\r\n );\r\n}\r\n\r\nfunction StatusChip({ status }: { status: string }) {\r\n const s = status?.toLowerCase();\r\n const isAns = s === \"answered\";\r\n const isAband = s === \"abandoned\";\r\n return (\r\n <Chip label={status || \"—\"} size=\"small\" sx={{\r\n fontSize: 11, fontWeight: 700, height: 22,\r\n background: isAns ? C.glt : isAband ? C.alt : C.rlt,\r\n color: isAns ? C.green : isAband ? C.amber : C.red,\r\n border: `1px solid ${isAns ? \"rgba(10,154,98,.2)\" : isAband ? \"rgba(196,124,0,.2)\" : \"rgba(204,42,42,.2)\"}`,\r\n fontFamily: \"'JetBrains Mono', monospace\",\r\n }} />\r\n );\r\n}\r\n\r\nfunction CallTypeChip({ type }: { type: string }) {\r\n const isIn = type?.toLowerCase() === \"inbound\";\r\n return (\r\n <Chip label={type || \"—\"} size=\"small\" sx={{\r\n fontSize: 11, fontWeight: 700, height: 22,\r\n background: isIn ? C.glt : C.blt,\r\n color: isIn ? C.green : C.blue,\r\n border: `1px solid ${isIn ? \"rgba(10,154,98,.2)\" : \"rgba(21,101,200,.2)\"}`,\r\n fontFamily: \"'JetBrains Mono', monospace\",\r\n }} />\r\n );\r\n}\r\n\r\nfunction RecordingCell({ callUuid, recordingPath }: { callUuid: string; recordingPath: string | null }) {\r\n const [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n const [loading, setLoading] = useState(false);\r\n const [error, setError] = useState(false);\r\n\r\n if (!recordingPath) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n <Tooltip title=\"No recording available\">\r\n <span>\r\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n <PlayArrowIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title=\"No recording available\">\r\n <span>\r\n <IconButton size=\"small\" disabled sx={{ p: 0.4 }}>\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n </Box>\r\n );\r\n }\r\n\r\n const handlePlay = async () => {\r\n if (audioUrl) return;\r\n try {\r\n setLoading(true);\r\n setError(false);\r\n const blob = await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n setAudioUrl(url);\r\n } catch {\r\n setError(true);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n const handleDownload = async () => {\r\n try {\r\n const blob = audioUrl\r\n ? await fetch(audioUrl).then((r) => r.blob())\r\n : await getRecordingByCall(callUuid);\r\n const url = URL.createObjectURL(blob);\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = `recording_${callUuid}.wav`;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n } catch {\r\n /* ignore */\r\n }\r\n };\r\n\r\n if (audioUrl) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <audio\r\n controls\r\n autoPlay\r\n src={audioUrl}\r\n onEnded={() => { if (audioUrl.startsWith(\"blob:\")) URL.revokeObjectURL(audioUrl); setAudioUrl(null); }}\r\n style={{ width: 140, height: 30 }}\r\n />\r\n <Tooltip title=\"Download\">\r\n <IconButton size=\"small\" onClick={handleDownload} sx={{ color: C.blue, p: 0.4 }}>\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </Tooltip>\r\n </Box>\r\n );\r\n }\r\n\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.3 }}>\r\n <Tooltip title={error ? \"Recording unavailable\" : \"Play\"}>\r\n <span>\r\n <IconButton size=\"small\" onClick={handlePlay} disabled={loading || error} sx={{ color: C.green, p: 0.4 }}>\r\n {loading ? <CircularProgress size={14} /> : <PlayArrowIcon sx={{ fontSize: 16 }} />}\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n <Tooltip title={error ? \"Recording unavailable\" : \"Download\"}>\r\n <span>\r\n <IconButton size=\"small\" onClick={handleDownload} disabled={loading || error} sx={{ color: C.blue, p: 0.4 }}>\r\n <FileDownloadIcon sx={{ fontSize: 16 }} />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n {error && <Chip label=\"No File\" size=\"small\" sx={{ fontSize: \"0.6rem\", height: 18 }} />}\r\n </Box>\r\n );\r\n}\r\n\r\nconst cdrHeadSx = {\r\n bgcolor: \"#f1f1f1\", color: \"#333\", fontWeight: 600,\r\n whiteSpace: \"nowrap\" as const, fontSize: \"14px\",\r\n py: 0.7, px: 1,\r\n};\r\n\r\nexport interface AgentDetailReportProps {\r\n agentRow?: ReportData | null;\r\n onBack?: () => void;\r\n from?: \"REPORTS_LIST\" | string;\r\n initialStartDate?: Dayjs | null;\r\n initialEndDate?: Dayjs | null;\r\n initialQuickRange?: string;\r\n}\r\n\r\nfunction AgentDetailReportContent({ agentRow: propAgentRow, onBack, from, initialStartDate, initialEndDate, initialQuickRange }: AgentDetailReportProps = {}) {\r\n const agentRow: ReportData | null = propAgentRow || null;\r\n const isFromReportsList = from === \"REPORTS_LIST\";\r\n const agentIdFromRow = isFromReportsList\r\n ? agentRow?.agentDetails?.agentId || \"\"\r\n : sdkStateManager.getState().agentId || agentRow?.agentDetails?.agentId || \"\";\r\n\r\n const [quickRange, setQuickRange] = useState<string>(initialQuickRange || \"today\");\r\n const [startDate, setStartDate] = useState<Dayjs | null>(initialStartDate ?? dayjs());\r\n const [endDate, setEndDate] = useState<Dayjs | null>(initialEndDate ?? dayjs());\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const syncFilterToUrl = (_sd: Dayjs, _ed: Dayjs, _range: string) => { /* no-op in SDK context */ };\r\n\r\n const [activeTab, setActiveTab] = useState(0);\r\n\r\n const [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\r\n const [detailLoading, setDetailLoading] = useState(!isFromReportsList);\r\n const [detailError, setDetailError] = useState(\"\");\r\n\r\n const [cdrRecords, setCdrRecords] = useState<CdrRecordResponse[]>([]);\r\n const [cdrTotal, setCdrTotal] = useState(0);\r\n const [cdrPage, setCdrPage] = useState(0);\r\n const [cdrPageSize, setCdrPageSize] = useState(10);\r\n const [cdrLoading, setCdrLoading] = useState(false);\r\n const [cdrError, setCdrError] = useState(\"\");\r\n\r\n // Break sessions dialog state (opened from the \"Breaks Taken\" stat)\r\n const [breaksDialogOpen, setBreaksDialogOpen] = useState(false);\r\n const [breakSessions, setBreakSessions] = useState<BreakSessionResponse[]>([]);\r\n const [breaksLoading, setBreaksLoading] = useState(false);\r\n\r\n const profile: AgentDetailProfile | null = detail?.profile || null;\r\n const agentName = profile?.fullName || agentRow?.agentDetails?.fullName || \"Unknown Agent\";\r\n const showInitialSpinner = !isFromReportsList && detailLoading && !profile && !agentRow?.agentDetails?.fullName;\r\n\r\n const setQuick = (range: string) => {\r\n setQuickRange(range);\r\n const today = dayjs();\r\n let sd: Dayjs = today;\r\n const ed: Dayjs = today;\r\n if (range === \"week\") sd = today.startOf(\"week\");\r\n else if (range === \"month\") sd = today.startOf(\"month\");\r\n setStartDate(sd);\r\n setEndDate(ed);\r\n syncFilterToUrl(sd, ed, range);\r\n };\r\n\r\n const fetchDetailFn = async (sd: Dayjs, ed: Dayjs) => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n setDetailLoading(true);\r\n setDetailError(\"\");\r\n const res = await getAgentDetailReport(agentIdFromRow, {\r\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n setDetail(res);\r\n } catch (err: any) {\r\n setDetailError(err?.message || \"Failed to load agent detail\");\r\n } finally {\r\n setDetailLoading(false);\r\n }\r\n };\r\n\r\n const fetchCdrFn = async (sd: Dayjs, ed: Dayjs, page: number, pageSize: number) => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n setCdrLoading(true);\r\n setCdrError(\"\");\r\n const params: CdrReportParams = {\r\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.isSame(dayjs(), \"day\") ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\") : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n search: agentIdFromRow,\r\n page: page + 1,\r\n pageSize: pageSize,\r\n };\r\n const res: any = await getCdrReport(params);\r\n setCdrRecords(deepFindArray<CdrRecordResponse>(res, [\"data\", \"records\"]));\r\n setCdrTotal(res?.records?.total ?? res?.total ?? res?.data?.total ?? 0);\r\n } catch (err: any) {\r\n setCdrError(err?.message || \"Failed to load call history\");\r\n } finally {\r\n setCdrLoading(false);\r\n }\r\n };\r\n\r\n /* ── Break sessions dialog ── */\r\n const loadBreakSessions = useCallback(async () => {\r\n if (!agentIdFromRow) return;\r\n setBreaksLoading(true);\r\n try {\r\n const sd = startDate ?? dayjs();\r\n const ed = endDate ?? dayjs();\r\n const data = await getAgentBreakSessions(agentIdFromRow, {\r\n start_date: sd.startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: ed.isSame(dayjs(), \"day\")\r\n ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n : ed.endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n setBreakSessions(Array.isArray(data) ? data : []);\r\n } catch {\r\n setBreakSessions([]);\r\n } finally {\r\n setBreaksLoading(false);\r\n }\r\n }, [agentIdFromRow, startDate, endDate]);\r\n\r\n const openBreaksDialog = async () => {\r\n if (!agentIdFromRow) return;\r\n setBreaksDialogOpen(true);\r\n await loadBreakSessions();\r\n };\r\n\r\n // Only toggle the dialog — keep breakSessions so the inline table (which\r\n // shares this state) isn't wiped when the dialog closes.\r\n const closeBreaksDialog = () => {\r\n setBreaksDialogOpen(false);\r\n };\r\n\r\n /* ── Manual refresh / search (re-fetch with the current date range) ── */\r\n const handleSearch = (sd?: Dayjs | null, ed?: Dayjs | null) => {\r\n const fromDate = sd ?? startDate;\r\n const toDate = ed ?? endDate;\r\n if (!fromDate || !toDate) return;\r\n fetchDetailFn(fromDate, toDate);\r\n setCdrPage(0);\r\n if (activeTab === 1) fetchCdrFn(fromDate, toDate, 0, cdrPageSize);\r\n };\r\n\r\n // Auto-fetch the detail report whenever the agent or date range changes.\r\n useEffect(() => {\r\n if (agentIdFromRow && startDate && endDate) fetchDetailFn(startDate, endDate);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [agentIdFromRow, startDate, endDate]);\r\n\r\n // Fetch CDR records on tab switch, pagination, or date-range change.\r\n useEffect(() => {\r\n if (activeTab === 1 && startDate && endDate) {\r\n fetchCdrFn(startDate, endDate, cdrPage, cdrPageSize);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeTab, cdrPage, cdrPageSize, startDate, endDate]);\r\n\r\n // Load break sessions inline whenever the Break Details tab is active.\r\n useEffect(() => {\r\n if (activeTab === 2 && agentIdFromRow && startDate && endDate) loadBreakSessions();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [activeTab, agentIdFromRow, startDate, endDate]);\r\n\r\n const hourlyCallData = useMemo(() => {\r\n return (detail?.hourlyCalls || []).map((h) => ({\r\n hour: String(h.hourOfDay).padStart(2, \"0\"),\r\n answered: h.answeredCalls,\r\n abandoned: h.missedCalls,\r\n }));\r\n }, [detail]);\r\n\r\n const timeUtilData = useMemo(() => {\r\n const tu = detail?.timeUtilisation;\r\n if (!tu) return [];\r\n const total = tu.totalLoginSeconds || 1;\r\n return [\r\n { name: \"On Call / Handle\", value: tu.onCallSeconds, pct: (tu.onCallSeconds / total) * 100, formatted: tu.onCallFormatted, color: C.blue },\r\n { name: \"Idle\", value: tu.idleSeconds, pct: (tu.idleSeconds / total) * 100, formatted: tu.idleFormatted, color: \"#e8a0a0\" },\r\n { name: \"Break\", value: tu.breakSeconds, pct: (tu.breakSeconds / total) * 100, formatted: tu.breakFormatted, color: C.amber },\r\n ];\r\n }, [detail]);\r\n\r\n const talkDurationBuckets = useMemo(() => {\r\n const items = [...(detail?.talkDistribution || [])].sort((a, b) => a.bucketOrder - b.bucketOrder);\r\n const total = items.reduce((s, b) => s + (b.callCount || 0), 0);\r\n return items.map((b) => ({\r\n bucket: b.bucketLabel,\r\n count: b.callCount,\r\n minSeconds: b.minSeconds,\r\n maxSeconds: b.maxSeconds,\r\n pct: total > 0 ? (b.callCount / total) * 100 : 0,\r\n }));\r\n }, [detail]);\r\n\r\n const talkDurationTotal = useMemo(\r\n () => talkDurationBuckets.reduce((s, b) => s + (b.count || 0), 0),\r\n [talkDurationBuckets],\r\n );\r\n\r\n const queuePieData = useMemo(() => {\r\n return (detail?.callsByQueue || []).map((q, i) => ({\r\n name: q.queueName,\r\n value: q.callCount,\r\n pctOfTotal: q.pctOfTotal,\r\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n }));\r\n }, [detail]);\r\n\r\n const queueMetrics = useMemo(() => {\r\n const items = detail?.queueMetrics || [];\r\n const grandTotal = items.reduce((sum, q) => sum + q.totalCalls, 0);\r\n return items.map((q, i) => ({\r\n ...q,\r\n pctOfTotal: grandTotal > 0 ? (q.totalCalls / grandTotal) * 100 : 0,\r\n answerRate: q.totalCalls > 0 ? (q.answeredCalls / q.totalCalls) * 100 : 0,\r\n color: QUEUE_COLORS[i % QUEUE_COLORS.length],\r\n }));\r\n }, [detail]);\r\n\r\n const hourlyChartTitle = useMemo(() => {\r\n if (quickRange === \"today\") return \"Hourly Call Volume — Today\";\r\n if (quickRange === \"month\") return `Hourly Call Volume — ${dayjs().format(\"MMMM YYYY\")}`;\r\n if (quickRange === \"week\") return \"Hourly Call Volume — This Week\";\r\n if (startDate && endDate) {\r\n if (startDate.isSame(endDate, \"day\")) return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")}`;\r\n return `Hourly Call Volume — ${startDate.format(\"DD MMM YYYY\")} to ${endDate.format(\"DD MMM YYYY\")}`;\r\n }\r\n return \"Hourly Call Volume\";\r\n }, [quickRange, startDate, endDate]);\r\n\r\n const handleBack = useCallback(() => {\r\n onBack?.();\r\n }, [onBack]);\r\n\r\n if (!agentIdFromRow) {\r\n return (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <Typography sx={{ color: C.t3, mb: 2 }}>No agent selected.</Typography>\r\n {isFromReportsList && (\r\n <AppButton onClick={handleBack}>\r\n Go Back\r\n </AppButton>\r\n )}\r\n </Box>\r\n );\r\n }\r\n\r\n if (showInitialSpinner) {\r\n return (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", minHeight: 400 }}>\r\n <CircularProgress size={36} />\r\n </Box>\r\n );\r\n }\r\n\r\n const tabs = [\"Overview\", \"Call History\", \"Break Details\"];\r\n\r\n return (\r\n <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n <Box sx={{ background: C.bg, minHeight: \"100vh\" }}>\r\n <PageHeader\r\n title={agentName}\r\n showBack={isFromReportsList}\r\n onBack={handleBack}\r\n />\r\n\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, flexWrap: \"wrap\", pb: 1.5, px: 2 }}>\r\n <DateRangePicker\r\n showTime={false}\r\n startDate={startDate}\r\n endDate={endDate}\r\n onStartChange={(d) => { setStartDate(d); setQuickRange(\"custom\"); if (d && endDate) syncFilterToUrl(d, endDate, \"custom\"); }}\r\n onEndChange={(d) => { setEndDate(d); setQuickRange(\"custom\"); if (startDate && d) syncFilterToUrl(startDate, d, \"custom\"); }}\r\n />\r\n <AppButton variant={quickRange === \"today\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"today\")} sx={{ whiteSpace: \"nowrap\" }}>Today</AppButton>\r\n <AppButton variant={quickRange === \"week\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"week\")} sx={{ whiteSpace: \"nowrap\" }}>This Week</AppButton>\r\n <AppButton variant={quickRange === \"month\" ? \"primary\" : \"outlined\"} onClick={() => setQuick(\"month\")} sx={{ whiteSpace: \"nowrap\" }}>This Month</AppButton>\r\n </Box>\r\n\r\n <Box sx={{ py: 2, px: 2, position: \"relative\" }}>\r\n {detailLoading && (\r\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(240,244,248,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 10 }}>\r\n <CircularProgress />\r\n </Box>\r\n )}\r\n\r\n {detailError && <Alert severity=\"error\" sx={{ mb: 2 }} onClose={() => setDetailError(\"\")}>{detailError}</Alert>}\r\n\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr 1fr\", sm: \"repeat(3, 1fr)\", md: \"repeat(5, 1fr)\" }, gap: 1.5, mb: 2 }}>\r\n {[\r\n { v: profile?.totalCalls ?? 0, l: \"Total Calls\", c: C.navy },\r\n { v: profile?.answeredCalls ?? 0, l: \"Answered\", c: C.green },\r\n { v: profile?.missedCalls ?? 0, l: \"Missed\", c: C.red },\r\n { v: profile?.avgAhtFormatted || \"00:00:00\", l: \"Avg AHT\", c: C.purple },\r\n { v: `${(profile?.answerRate ?? 0).toFixed(1)}%`, l: \"Answer Rate\", c: C.green },\r\n { v: profile?.loginDurationFormatted || \"00:00:00\", l: \"Login Duration\", c: C.blue },\r\n { v: profile?.productionFormatted || \"00:00:00\", l: \"Production\", c: C.blue },\r\n { v: profile?.handleTimeFormatted || \"00:00:00\", l: \"Handle Time\", c: C.purple },\r\n { v: profile?.breakTimeFormatted || \"00:00:00\", l: \"Break Time\", c: C.amber },\r\n { v: `${(profile?.adherencePct ?? 0).toFixed(1)}%`, l: `Adherence${profile?.adherenceGrade ? ` (${profile.adherenceGrade})` : \"\"}`, c: C.teal },\r\n ].map((kpi, i) => (\r\n <Box key={i} sx={{\r\n px: 1.5, py: 1.2,\r\n borderRadius: \"10px\",\r\n backgroundColor: \"#fafafa\",\r\n borderLeft: `3px solid ${kpi.c}`,\r\n border: \"1px solid #e0e0e0\",\r\n borderLeftWidth: \"3px\",\r\n borderLeftStyle: \"solid\",\r\n borderLeftColor: kpi.c,\r\n }}>\r\n <Typography sx={{\r\n fontFamily: \"poppins, Arial, sans-serif\",\r\n fontSize: \"0.72rem\", fontWeight: 600, color: \"#888\", mb: 0.3,\r\n }}>\r\n {kpi.l}\r\n </Typography>\r\n <Typography sx={{\r\n fontFamily: \"poppins, Arial, sans-serif\",\r\n fontSize: \"0.95rem\", fontWeight: 700, color: \"#1a1a1a\",\r\n }}>\r\n {kpi.v}\r\n </Typography>\r\n </Box>\r\n ))}\r\n </Box>\r\n\r\n <Box sx={{ display: \"flex\", alignItems: { xs: \"flex-start\", sm: \"center\" }, justifyContent: \"space-between\", flexDirection: { xs: \"column\", sm: \"row\" }, gap: 1, borderBottom: `2px solid ${C.b1}`, mb: 2 }}>\r\n <Box sx={{ display: \"flex\", gap: 0.5, flexWrap: \"wrap\" }}>\r\n {tabs.map((tab, idx) => (\r\n <Box key={tab} onClick={() => setActiveTab(idx)}\r\n sx={{\r\n px: 2, py: 1, fontSize: 13, fontWeight: 600, cursor: \"pointer\",\r\n color: activeTab === idx ? C.blue : C.t3,\r\n borderBottom: `2px solid ${activeTab === idx ? C.blue : \"transparent\"}`,\r\n mb: \"-2px\", transition: \"all .15s\", \"&:hover\": { color: C.t1 },\r\n }}>\r\n {tab}\r\n </Box>\r\n ))}\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5, mb: \"-2px\" }}>\r\n <AppButton\r\n size=\"small\"\r\n startIcon={<RefreshIcon />}\r\n disabled={detailLoading || cdrLoading}\r\n onClick={() => handleSearch()}\r\n >\r\n Refresh\r\n </AppButton>\r\n {activeTab !== 2 && (\r\n <AppButton size=\"small\" startIcon={<SearchIcon />} onClick={() => handleSearch()}>\r\n Search\r\n </AppButton>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n {activeTab === 0 && (\r\n <Box>\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2, mb: 2 }}>\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>{hourlyChartTitle}</Typography>\r\n <Chip label={agentName} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.blt, color: C.blue, border: `1px solid rgba(21,101,200,.2)` }} />\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <BarChart data={hourlyCallData} barGap={1}>\r\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n <XAxis dataKey=\"hour\" tick={{ fontSize: 11, fill: C.t3 }} />\r\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} />\r\n <RTooltip labelFormatter={(label) => `${String(label).padStart(2, \"0\")}:00`} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\r\n <Legend wrapperStyle={{ fontSize: 11 }} />\r\n <Bar dataKey=\"answered\" name=\"Answered\" fill={C.blue} radius={[3, 3, 0, 0]} />\r\n <Bar dataKey=\"abandoned\" name=\"Abandoned\" fill={C.red} radius={[3, 3, 0, 0]} />\r\n </BarChart>\r\n </ResponsiveContainer>\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Time Utilisation Breakdown</Typography>\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n {timeUtilData.length > 0 ? (\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <PieChart>\r\n <Pie data={timeUtilData} cx=\"50%\" cy=\"50%\" innerRadius={60} outerRadius={95} dataKey=\"value\" nameKey=\"name\" minAngle={8}>\r\n {timeUtilData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\r\n </Pie>\r\n <RTooltip formatter={(_val, name, entry) => [`${(entry as any).payload.formatted} (${(entry as any).payload.pct.toFixed(1)}%)`, name]} contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }} />\r\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\r\n </PieChart>\r\n </ResponsiveContainer>\r\n ) : (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\", mb: 2 }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Talk Duration Distribution</Typography>\r\n <Chip label={`${talkDurationTotal} call${talkDurationTotal === 1 ? \"\" : \"s\"}`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.glt, color: C.green, border: `1px solid rgba(10,154,98,.2)` }} />\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n {talkDurationBuckets.length > 0 ? (\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <BarChart data={talkDurationBuckets} margin={{ top: 16, right: 16, left: 0, bottom: 20 }}>\r\n <CartesianGrid strokeDasharray=\"3 3\" stroke={C.b1} />\r\n <XAxis dataKey=\"bucket\" tick={{ fontSize: 11, fill: C.t3 }} label={{ value: \"Talking Duration\", position: \"insideBottom\", offset: -5, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\r\n <YAxis tick={{ fontSize: 11, fill: C.t3 }} allowDecimals={false} label={{ value: \"Call Count\", angle: -90, position: \"insideLeft\", offset: 10, style: { fontSize: 11, fontWeight: 600, fill: C.t2 } }} />\r\n <RTooltip\r\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n labelFormatter={(label, payload) => {\r\n const p = payload?.[0]?.payload as { minSeconds?: number; maxSeconds?: number } | undefined;\r\n if (!p) return String(label);\r\n return `${label} (${p.minSeconds}–${p.maxSeconds}s)`;\r\n }}\r\n formatter={(val, _name, entry) => {\r\n const pct = (entry as any)?.payload?.pct;\r\n return [`${val} call${val === 1 ? \"\" : \"s\"}${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, \"Calls\"];\r\n }}\r\n />\r\n <Bar dataKey=\"count\" name=\"Calls\" fill={C.teal} radius={[4, 4, 0, 0]}>\r\n <LabelList dataKey=\"count\" position=\"top\" style={{ fontSize: 11, fontWeight: 700, fill: C.t1 }} />\r\n </Bar>\r\n </BarChart>\r\n </ResponsiveContainer>\r\n ) : (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"1fr\", md: \"1fr 1fr\" }, gap: 2 }}>\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Calls by Queue</Typography>\r\n </Box>\r\n <Box sx={{ p: 2, height: 260 }}>\r\n {queuePieData.length > 0 ? (\r\n <ResponsiveContainer width=\"100%\" height=\"100%\">\r\n <PieChart>\r\n <Pie data={queuePieData} cx=\"50%\" cy=\"50%\" outerRadius={90} dataKey=\"value\" nameKey=\"name\">\r\n {queuePieData.map((entry, idx) => <Cell key={idx} fill={entry.color} />)}\r\n </Pie>\r\n <RTooltip\r\n contentStyle={{ fontSize: 12, borderRadius: 8, border: `1px solid ${C.b2}` }}\r\n formatter={(val, name, entry) => {\r\n const pct = (entry as any)?.payload?.pctOfTotal;\r\n return [`${val} calls${pct != null ? ` (${pct.toFixed(1)}%)` : \"\"}`, name];\r\n }}\r\n />\r\n <Legend wrapperStyle={{ fontSize: 12 }} formatter={(value: string) => <span style={{ color: C.t1, fontWeight: 500 }}>{value}</span>} />\r\n </PieChart>\r\n </ResponsiveContainer>\r\n ) : (\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"100%\", color: C.t3, fontSize: 13 }}>No queue data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n\r\n <Box sx={{ border: `1px solid ${C.b1}`, borderRadius: \"10px\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}` }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Queue Performance Metrics</Typography>\r\n </Box>\r\n <Box sx={{ p: 2 }}>\r\n {queueMetrics.length > 0 ? queueMetrics.map((q) => (\r\n <Box key={q.queueName} sx={{ mb: 2, \"&:last-child\": { mb: 0 } }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 0.3 }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n <Box sx={{ width: 10, height: 10, borderRadius: \"50%\", background: q.color, flexShrink: 0 }} />\r\n <Typography sx={{ fontSize: 13, fontWeight: 700, color: C.t1 }}>{q.queueName}</Typography>\r\n </Box>\r\n <Typography sx={{ ...monoSx, fontSize: 13, fontWeight: 800, color: q.color }}>\r\n {q.totalCalls} calls\r\n <Typography component=\"span\" sx={{ ...monoSx, color: C.t3, ml: 0.5 }}>\r\n ({q.answeredCalls} ans / {q.missedCalls} miss)\r\n </Typography>\r\n </Typography>\r\n </Box>\r\n <Box sx={{ height: 6, background: C.s3, borderRadius: 3, overflow: \"hidden\", mb: 0.3 }}>\r\n <Box sx={{ height: \"100%\", width: `${q.pctOfTotal ?? 0}%`, background: q.color, borderRadius: 3 }} />\r\n </Box>\r\n <Box sx={{ display: \"flex\", flexWrap: \"wrap\", columnGap: 1.5, rowGap: 0.2 }}>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>{(q.pctOfTotal ?? 0).toFixed(0)}% of total</Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Ans: {(q.answerRate ?? 0).toFixed(0)}%</Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Talk: <span style={{ ...monoSx, color: C.t2 }}>{q.avgTalkFormatted}</span></Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Hold: <span style={{ ...monoSx, color: C.t2 }}>{q.avgHoldFormatted}</span></Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>Wrap: <span style={{ ...monoSx, color: C.t2 }}>{q.avgWrapupFormatted}</span></Typography>\r\n <Typography sx={{ fontSize: 11, color: C.t3 }}>AHT: <span style={{ ...monoSx, color: C.t2 }}>{q.avgAhtFormatted}</span></Typography>\r\n </Box>\r\n </Box>\r\n )) : (\r\n <Box sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No queue data</Box>\r\n )}\r\n </Box>\r\n </Box>\r\n </Box>\r\n </Box>\r\n )}\r\n\r\n {activeTab === 1 && (\r\n <Box sx={{ borderRadius: \"8px\", border: \"1px solid #e0e7ef\", overflow: \"hidden\", background: \"transparent\" }}>\r\n <Box sx={{ px: 2, py: 1.2, background: C.s2, borderBottom: `1px solid ${C.b1}`, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\" }}>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n <Typography sx={{ fontSize: 12, fontWeight: 700, letterSpacing: 0.8, textTransform: \"uppercase\", color: C.t2 }}>Call History</Typography>\r\n <Chip label={`${cdrTotal} records`} size=\"small\" sx={{ fontSize: 11, fontWeight: 700, background: C.s2, color: C.t3, border: `1px solid ${C.b2}` }} />\r\n </Box>\r\n </Box>\r\n {cdrError && <Alert severity=\"error\" sx={{ mx: 2, mt: 1 }} onClose={() => setCdrError(\"\")}>{cdrError}</Alert>}\r\n <TableContainer sx={{ position: \"relative\" }}>\r\n {cdrLoading && (\r\n <Box sx={{ position: \"absolute\", top: 0, left: 0, right: 0, bottom: 0, background: \"rgba(255,255,255,0.7)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\", zIndex: 5 }}>\r\n <CircularProgress size={28} />\r\n </Box>\r\n )}\r\n <Table size=\"small\" sx={{\r\n minWidth: 1400,\r\n \"& .MuiTableCell-root\": { fontSize: \"0.75rem\", borderBottom: \"1px solid #eef1f6\", py: 0.6, px: 1 },\r\n }}>\r\n <TableHead>\r\n <TableRow>\r\n {[\r\n \"Phone Number\", \"Call Start\", \"Call Type\", \"Status\", \"Queue\", \"Extension\",\r\n \"Talk Duration\", \"Hold Duration\", \"Ringing Duration\", \"Wrapup Duration\",\r\n \"Disposition\", \"Transferred\", \"Recording\",\r\n ].map((label) => (\r\n <TableCell key={label} sx={cdrHeadSx}>{label}</TableCell>\r\n ))}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {cdrRecords.map((row, idx) => (\r\n <TableRow key={row.callUuid || idx} hover sx={{\r\n backgroundColor: \"#fff\",\r\n \"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n }}>\r\n <TableCell sx={{ fontWeight: 600, color: C.navy, fontSize: \"0.75rem\" }}>{row.phoneNumber || \"\"}</TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n {row.callStartTime ? dayjs(row.callStartTime).format(\"DD MMM YYYY hh:mm A\") : \"\"}\r\n </TableCell>\r\n <TableCell><CallTypeChip type={row.callType || \"\"} /></TableCell>\r\n <TableCell><StatusChip status={row.callStatus || \"\"} /></TableCell>\r\n <TableCell>\r\n {row.queueName\r\n ? <Chip label={row.queueName} size=\"small\" sx={{ backgroundColor: \"#f0ebfa\", color: C.purple, fontWeight: 500, fontSize: \"0.67rem\", height: 22 }} />\r\n : \"\"}\r\n </TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.extension || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 600, color: C.blue, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.talkDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 500, color: C.amber, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.holdDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.ringingDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontWeight: 500, color: C.purple, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.wrapupDurationFmt || \"\"}</TableCell>\r\n <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.disposition || \"\"}</TableCell>\r\n <TableCell>\r\n {row.wasTransferred\r\n ? <Chip label=\"Yes\" size=\"small\" sx={{ backgroundColor: \"#e6f7ef\", color: C.green, fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />\r\n : <Chip label=\"No\" size=\"small\" sx={{ backgroundColor: \"transparent\", color: \"#6b7b8d\", fontWeight: 600, fontSize: \"0.65rem\", height: 20, borderRadius: \"6px\" }} />}\r\n </TableCell>\r\n <TableCell>\r\n {row.callUuid ? <RecordingCell callUuid={row.callUuid} recordingPath={row.recordingPath ?? null} /> : \"\"}\r\n </TableCell>\r\n </TableRow>\r\n ))}\r\n {!cdrLoading && cdrRecords.length === 0 && (\r\n <TableRow><TableCell colSpan={13} sx={{ textAlign: \"center\", py: 4, color: C.t3, fontSize: 13 }}>No call records found</TableCell></TableRow>\r\n )}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n <TablePagination\r\n component=\"div\" count={cdrTotal} page={cdrPage}\r\n onPageChange={(_, p) => setCdrPage(p)} rowsPerPage={cdrPageSize}\r\n onRowsPerPageChange={(e) => { setCdrPageSize(parseInt(e.target.value, 10)); setCdrPage(0); }}\r\n rowsPerPageOptions={[10, 15, 25, 50, 100]}\r\n sx={{ borderTop: \"1px solid #eef1f6\", \"& .MuiTablePagination-displayedRows\": { fontSize: \"0.73rem\" }, \"& .MuiTablePagination-selectLabel\": { fontSize: \"0.73rem\" } }}\r\n />\r\n </Box>\r\n )}\r\n\r\n {activeTab === 2 && (\r\n <Box>\r\n {/* ═══ BREAK SESSIONS (inline table) ═══ */}\r\n <Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", mb: 1 }}>\r\n <Typography sx={{ fontSize: \"0.72rem\", fontWeight: 700, color: \"#888\", textTransform: \"uppercase\", letterSpacing: 0.8, fontFamily: \"poppins, Arial, sans-serif\" }}>\r\n Break Sessions\r\n </Typography>\r\n <AppButton\r\n size=\"small\"\r\n startIcon={<FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n disabled={breaksLoading || breakSessions.length === 0}\r\n onClick={async () => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n await exportAgentBreakSessionsToExcel(agentIdFromRow, {\r\n start_date: (startDate ?? dayjs()).startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: (endDate ?? dayjs()).isSame(dayjs(), \"day\")\r\n ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n : (endDate ?? dayjs()).endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n } catch (err: any) {\r\n setDetailError(err?.message || \"Failed to export breaks Excel\");\r\n }\r\n }}\r\n >\r\n Export to Excel\r\n </AppButton>\r\n </Box>\r\n {breaksLoading ? (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <CircularProgress size={26} sx={{ color: \"var(--primary-color, #1A5F6C)\" }} />\r\n </Box>\r\n ) : breakSessions.length > 0 ? (\r\n <BreakSessionsTable breaks={breakSessions} />\r\n ) : (\r\n <Box sx={{ p: 3, textAlign: \"center\", border: \"1px solid #e4eaf0\", borderRadius: \"10px\", backgroundColor: \"#fff\" }}>\r\n <Typography sx={{ fontFamily: FONT, color: \"#9e9e9e\", fontStyle: \"italic\", fontSize: \"0.82rem\" }}>No breaks found</Typography>\r\n </Box>\r\n )}\r\n </Box>\r\n </Box>\r\n )}\r\n </Box>\r\n\r\n {/* ─── BREAK SESSIONS DIALOG ─── */}\r\n <Dialog\r\n open={breaksDialogOpen}\r\n onClose={(_e, reason) => { if (reason !== \"backdropClick\") closeBreaksDialog(); }}\r\n maxWidth=\"md\"\r\n fullWidth\r\n PaperProps={{\r\n sx: {\r\n borderRadius: \"12px\",\r\n fontFamily: FONT,\r\n overflow: \"hidden\",\r\n boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\",\r\n maxWidth: 640,\r\n },\r\n }}\r\n >\r\n <DialogTitle\r\n sx={{\r\n fontFamily: FONT,\r\n background: \"linear-gradient(135deg, var(--primary-color-dark, #14505b), var(--primary-color, #1A5F6C))\",\r\n color: \"#fff\",\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"center\",\r\n py: 1.5,\r\n px: 2.5,\r\n }}\r\n >\r\n <Box>\r\n <Typography variant=\"h6\" sx={{ fontFamily: FONT, fontWeight: 700, fontSize: \"0.95rem\", letterSpacing: \"0.3px\" }}>\r\n Break Sessions\r\n </Typography>\r\n <Typography variant=\"body2\" sx={{ fontFamily: FONT, opacity: 0.9, fontSize: \"0.76rem\", mt: 0.3 }}>\r\n {agentName} &bull; {breakSessions.length} break{breakSessions.length !== 1 ? \"s\" : \"\"}\r\n </Typography>\r\n </Box>\r\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.5 }}>\r\n <AppButton\r\n size=\"small\"\r\n startIcon={<FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n disabled={breaksLoading || breakSessions.length === 0}\r\n onClick={async () => {\r\n if (!agentIdFromRow) return;\r\n try {\r\n await exportAgentBreakSessionsToExcel(agentIdFromRow, {\r\n start_date: (startDate ?? dayjs()).startOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n end_date: (endDate ?? dayjs()).isSame(dayjs(), \"day\")\r\n ? dayjs().format(\"YYYY-MM-DDTHH:mm:ss\")\r\n : (endDate ?? dayjs()).endOf(\"day\").format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n });\r\n } catch (err: any) {\r\n setDetailError(err?.message || \"Failed to export breaks Excel\");\r\n }\r\n }}\r\n sx={{ whiteSpace: \"nowrap\" }}\r\n >\r\n Export to Excel\r\n </AppButton>\r\n <IconButton\r\n onClick={closeBreaksDialog}\r\n size=\"small\"\r\n sx={{\r\n color: \"#fff\",\r\n backgroundColor: \"rgba(255,255,255,0.1)\",\r\n \"&:hover\": { backgroundColor: \"rgba(255,255,255,0.2)\" },\r\n }}\r\n >\r\n <CloseIcon fontSize=\"small\" />\r\n </IconButton>\r\n </Box>\r\n </DialogTitle>\r\n\r\n <DialogContent sx={{ p: 0, backgroundColor: \"#f8fafb\" }}>\r\n {breaksLoading ? (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <CircularProgress size={28} sx={{ color: \"var(--primary-color, #1A5F6C)\" }} />\r\n </Box>\r\n ) : breakSessions.length > 0 ? (\r\n <Box sx={{ p: 1.5 }}>\r\n <BreakSessionsTable breaks={breakSessions} maxHeight={360} showRemarksStatus={false} />\r\n </Box>\r\n ) : (\r\n <Box sx={{ p: 4, textAlign: \"center\" }}>\r\n <Typography sx={{ fontFamily: FONT, color: \"#9e9e9e\", fontStyle: \"italic\", fontSize: \"0.82rem\" }}>\r\n No breaks found\r\n </Typography>\r\n </Box>\r\n )}\r\n </DialogContent>\r\n </Dialog>\r\n </Box>\r\n </LocalizationProvider>\r\n );\r\n}\r\n\r\nconst AgentDetailReport: React.FC<AgentDetailReportProps> = (props) => (\r\n <SDKProvider>\r\n <AgentDetailReportContent {...props} />\r\n </SDKProvider>\r\n);\r\n\r\nexport default AgentDetailReport;\r\n","import { Typography, Chip, Table, TableBody, TableCell, TableContainer, TableHead, TableRow } from \"@mui/material\";\r\nimport dayjs from \"dayjs\";\r\nimport type { BreakSessionResponse } from \"../../agentDetailReport/types\";\r\n\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\nconst C = { green: \"#0a9a62\", red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\", plt: \"#f0eafa\", glt: \"#e4f6ef\", tlt: \"#e3f4f7\" };\r\n\r\n// Fallback formatter when the API omits durationFormatted but gives seconds.\r\nfunction fmtDur(s: number): string {\r\n if (!s || s <= 0) return \"\";\r\n const h = Math.floor(s / 3600), m = Math.floor((s % 3600) / 60), sc = Math.floor(s % 60);\r\n return [h, m, sc].map((x) => String(x).padStart(2, \"0\")).join(\":\");\r\n}\r\nfunction fmtDateTime(v?: string | null): string {\r\n return v ? dayjs(v).format(\"DD MMM YYYY h:mm:ss A\") : \"\";\r\n}\r\nfunction fmtDuration(b: BreakSessionResponse): string {\r\n return b.durationFormatted || (b.durationSeconds != null ? fmtDur(b.durationSeconds) : \"\");\r\n}\r\n\r\n/**\r\n * Break sessions rendered as a table — shared by the agent-detail Break Details\r\n * tab, its dialog, and the performance-tab break drill-down so the layout stays\r\n * identical everywhere. Null / missing values render as empty cells.\r\n */\r\nexport default function BreakSessionsTable({ breaks, maxHeight = 380, showRemarksStatus = true }: { breaks: BreakSessionResponse[]; maxHeight?: number; showRemarksStatus?: boolean }) {\r\n return (\r\n <TableContainer sx={{ maxHeight, backgroundColor: \"#fff\", border: \"1px solid #e4eaf0\", borderRadius: \"10px\" }}>\r\n <Table stickyHeader size=\"small\" sx={{ \"& td, & th\": { fontFamily: FONT } }}>\r\n <TableHead>\r\n <TableRow sx={{ \"& th\": { backgroundColor: \"#f0f5f4\", fontWeight: 700, fontSize: \"0.72rem\", color: \"#555\", textTransform: \"uppercase\", letterSpacing: \"0.5px\", borderBottom: \"1px solid #e4eaf0\", py: 0.9 } }}>\r\n <TableCell>Break Type</TableCell>\r\n <TableCell>Started At</TableCell>\r\n <TableCell>Ended At</TableCell>\r\n <TableCell>Duration</TableCell>\r\n {showRemarksStatus && <TableCell>Remarks</TableCell>}\r\n {showRemarksStatus && <TableCell>Status</TableCell>}\r\n </TableRow>\r\n </TableHead>\r\n <TableBody>\r\n {breaks.map((b, i) => (\r\n <TableRow key={b.sessionId ?? i} hover sx={{ \"& td\": { fontSize: \"0.78rem\", borderBottom: \"1px solid #eef1f6\", py: 0.7 } }}>\r\n <TableCell>\r\n {b.breakType\r\n ? <Chip label={b.breakType} size=\"small\" sx={{ fontFamily: FONT, fontSize: \"0.65rem\", fontWeight: 600, height: 18, backgroundColor: C.plt, color: C.purple }} />\r\n : \"\"}\r\n </TableCell>\r\n <TableCell sx={{ color: b.breakStart ? C.green : \"#9e9e9e\", whiteSpace: \"nowrap\" }}>{fmtDateTime(b.breakStart)}</TableCell>\r\n <TableCell sx={{ color: b.breakEnd ? C.red : \"#9e9e9e\", whiteSpace: \"nowrap\" }}>{fmtDateTime(b.breakEnd)}</TableCell>\r\n <TableCell>\r\n {fmtDuration(b)\r\n ? <Typography component=\"span\" sx={{ fontFamily: FONT, fontSize: \"0.72rem\", fontWeight: 700, fontVariantNumeric: \"tabular-nums\", color: C.teal, backgroundColor: C.tlt, borderRadius: \"5px\", px: 0.8, py: 0.25, whiteSpace: \"nowrap\" }}>{fmtDuration(b)}</Typography>\r\n : \"\"}\r\n </TableCell>\r\n {showRemarksStatus && <TableCell sx={{ color: \"#555\" }}>{b.remarks || \"\"}</TableCell>}\r\n {showRemarksStatus && (\r\n <TableCell>\r\n {b.status\r\n ? <Chip label={b.status} size=\"small\" sx={{ fontFamily: FONT, fontSize: \"0.62rem\", fontWeight: 700, height: 18, backgroundColor: b.status === \"Active\" ? C.glt : \"#eef2f7\", color: b.status === \"Active\" ? C.green : \"#555\" }} />\r\n : \"\"}\r\n </TableCell>\r\n )}\r\n </TableRow>\r\n ))}\r\n </TableBody>\r\n </Table>\r\n </TableContainer>\r\n );\r\n}\r\n\r\nexport { BreakSessionsTable };\r\n","import { useCallback, useState } from \"react\";\r\nimport axiosInstance, { deepFindArray } from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type {\r\n\tAgentDetailReportParams,\r\n\tAgentDetailReportResponse,\r\n\tBreakSessionResponse,\r\n\tCdrReportParams,\r\n\tCdrReportResponse,\r\n} from \"./types\";\r\n\r\nfunction buildCdrQs(params: CdrReportParams): string {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\tif (params.agent_id) for (const id of params.agent_id) qs.append(\"agent_id\", String(id));\r\n\tif (params.queue_id) for (const id of params.queue_id) qs.append(\"queue_id\", String(id));\r\n\tif (params.call_type) qs.append(\"call_type\", params.call_type);\r\n\tif (params.status) qs.append(\"status\", params.status);\r\n\tif (params.search) qs.append(\"search\", params.search);\r\n\tif (params.page) qs.append(\"page\", String(params.page));\r\n\tif (params.pageSize) qs.append(\"pageSize\", String(params.pageSize));\r\n\tconst str = qs.toString();\r\n\treturn str ? `?${str}` : \"\";\r\n}\r\n\r\nexport function useAgentDetailReport() {\r\n\tconst [detail, setDetail] = useState<AgentDetailReportResponse | null>(null);\r\n\tconst [detailLoading, setDetailLoading] = useState(false);\r\n\tconst [detailError, setDetailError] = useState(\"\");\r\n\r\n\tconst fetchDetail = useCallback(\r\n\t\tasync (agentId: string, params: AgentDetailReportParams) => {\r\n\t\t\tif (!agentId) return;\r\n\t\t\tsetDetailLoading(true);\r\n\t\t\tsetDetailError(\"\");\r\n\t\t\ttry {\r\n\t\t\t\tconst qs = new URLSearchParams();\r\n\t\t\t\tif (params.start_date) qs.append(\"start_date\", params.start_date);\r\n\t\t\t\tif (params.end_date) qs.append(\"end_date\", params.end_date);\r\n\t\t\t\tconst qsStr = qs.toString();\r\n\t\t\t\tconst url = `${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`;\r\n\t\t\t\tconst res = await axiosInstance.get<AgentDetailReportResponse>(url);\r\n\t\t\t\tsetDetail(res.data);\r\n\t\t\t} catch (err: any) {\r\n\t\t\t\tsetDetailError(err?.response?.data?.message || err?.message || \"Failed to load agent detail\");\r\n\t\t\t\tsetDetail(null);\r\n\t\t\t} finally {\r\n\t\t\t\tsetDetailLoading(false);\r\n\t\t\t}\r\n\t\t},\r\n\t\t[],\r\n\t);\r\n\r\n\treturn { detail, detailLoading, detailError, setDetailError, fetchDetail };\r\n}\r\n\r\nexport function useAgentCdrRecords() {\r\n\tconst [records, setRecords] = useState<CdrReportResponse[\"records\"][\"data\"]>([]);\r\n\tconst [total, setTotal] = useState(0);\r\n\tconst [loading, setLoading] = useState(false);\r\n\tconst [error, setError] = useState(\"\");\r\n\r\n\tconst fetchCdr = useCallback(async (params: CdrReportParams) => {\r\n\t\tsetLoading(true);\r\n\t\tsetError(\"\");\r\n\t\ttry {\r\n\t\t\tconst res = await axiosInstance.get<CdrReportResponse>(\r\n\t\t\t\t`${END_POINT.CDR_REPORT}${buildCdrQs(params)}`,\r\n\t\t\t);\r\n\t\t\tsetRecords(res.data?.records?.data || []);\r\n\t\t\tsetTotal(res.data?.records?.total || 0);\r\n\t\t} catch (err: any) {\r\n\t\t\tsetError(err?.response?.data?.message || err?.message || \"Failed to load call history\");\r\n\t\t\tsetRecords([]);\r\n\t\t\tsetTotal(0);\r\n\t\t} finally {\r\n\t\t\tsetLoading(false);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { records, total, loading, error, setError, fetchCdr };\r\n}\r\n\r\nexport async function fetchRecordingBlob(callUuid: string): Promise<Blob> {\r\n\tconst res = await axiosInstance.get(END_POINT.RECORDING_BY_CALL(callUuid), {\r\n\t\tresponseType: \"blob\",\r\n\t});\r\n\treturn res.data as Blob;\r\n}\r\n\r\nexport async function getAgentDetailReport(\r\n\tagentId: string,\r\n\tparams?: AgentDetailReportParams,\r\n): Promise<AgentDetailReportResponse> {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get<AgentDetailReportResponse>(\r\n\t\t`${END_POINT.AGENT_DETAIL_REPORT(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getAgentBreakSessions(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string },\r\n): Promise<BreakSessionResponse[]> {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get(\r\n\t\t`${END_POINT.LOGIN_REPORT_AGENT_BREAKS(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t);\r\n\t// Response may be a bare array or wrapped ({ data: [...] }, { breaks: [...] }, etc.),\r\n\t// and occasionally an unparsed JSON string if Content-Type wasn't application/json.\r\n\tlet body: any = res.data;\r\n\tif (typeof body === \"string\") {\r\n\t\ttry { body = JSON.parse(body); } catch { /* leave as-is */ }\r\n\t}\r\n\treturn deepFindArray<BreakSessionResponse>(body, [\"breaks\", \"sessions\", \"data\"]);\r\n}\r\n\r\nexport async function exportAgentBreakSessionsToExcel(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string },\r\n): Promise<void> {\r\n\tconst qs = new URLSearchParams();\r\n\tif (params?.start_date) qs.append(\"start_date\", params.start_date);\r\n\tif (params?.end_date) qs.append(\"end_date\", params.end_date);\r\n\tconst qsStr = qs.toString();\r\n\tconst res = await axiosInstance.get(\r\n\t\t`${END_POINT.LOGIN_REPORT_AGENT_BREAKS_EXPORT_EXCEL(agentId)}${qsStr ? `?${qsStr}` : \"\"}`,\r\n\t\t{ responseType: \"blob\" },\r\n\t);\r\n\tconst blobUrl = URL.createObjectURL(new Blob([res.data]));\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = blobUrl;\r\n\ta.download = `break_sessions_${agentId}.xlsx`;\r\n\tdocument.body.appendChild(a);\r\n\ta.click();\r\n\ta.remove();\r\n\tURL.revokeObjectURL(blobUrl);\r\n}\r\n\r\nexport async function getCdrReport(params: CdrReportParams): Promise<CdrReportResponse> {\r\n\tconst qs = buildCdrQs(params);\r\n\tconst res = await axiosInstance.get<CdrReportResponse>(`${END_POINT.CDR_REPORT}${qs}`);\r\n\treturn res.data;\r\n}\r\n\r\nexport async function getRecordingByCall(callUuid: string): Promise<Blob> {\r\n\treturn fetchRecordingBlob(callUuid);\r\n}\r\n"],"mappings":"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","names":["useState","useCallback","Typography","Table","TableBody","TableCell","TableContainer","TableHead","TableRow","Chip","dayjs","jsx","jsxs","C","FONT","jsx","Chip","C","useState","jsxs","dayjs","_a","_b","_c","_d","_e","useCallback","Typography","TableContainer","Table","TableHead","TableRow","TableCell","TableBody","FONT"]}