{"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, useRef } 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, { BreakTypeCounts, type BreakSort } 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 GroupsIcon from \"@mui/icons-material/Groups\";\r\nimport AssignmentIcon from \"@mui/icons-material/Assignment\";\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, getAgentBreakSessionsWithCounts, exportAgentBreakSessionsToExcel, exportCdrReportToExcel } from \"./useAgentDetailReport\";\r\nimport type {\r\n  AgentDetailReportResponse,\r\n  AgentDetailProfile,\r\n  BreakSessionResponse,\r\n  BreakTypeCount,\r\n  CdrRecordResponse,\r\n  CdrReportParams,\r\n  ReportData,\r\n} from \"./types\";\r\nimport { deepFindArray } from \"../../services/axios\";\r\nimport PageHeader from \"../common/components/PageHeader\";\r\nimport ConferenceTimelineDialog from \"../common/components/ConferenceTimeline\";\r\nimport AuditReportDialog from \"../common/components/AuditReport\";\r\nimport { useSDKPermissions } from \"../../hooks/useSDKPermissions\";\r\nimport { sdkStateManager } from \"../../hooks/sdk-state\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\n\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { useNumberMask } from \"../../utils/numberMask\";\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\n// API range from the exact picked date-times (the filter carries time, so no\r\n// start/end-of-day snapping).\r\nconst toApiRange = (sd: Dayjs, ed: Dayjs) => ({\r\n  start_date: sd.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n  end_date: ed.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n});\r\n\r\n// Today / This Week / This Month → [start-of-period, now]; null for a custom range.\r\nconst presetRange = (range: string): [Dayjs, Dayjs] | null => {\r\n  const now = dayjs();\r\n  if (range === \"today\") return [now.startOf(\"day\"), now];\r\n  if (range === \"week\") return [now.startOf(\"week\"), now];\r\n  if (range === \"month\") return [now.startOf(\"month\"), now];\r\n  return null;\r\n};\r\n\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 IdCell({ value, maxWidth = 140 }: { value: string | null; maxWidth?: number }) {\r\n  if (!value) return null;\r\n  return (\r\n    <Tooltip title={value} arrow placement=\"top\">\r\n      <Typography\r\n        component=\"span\"\r\n        sx={{\r\n          fontSize: \"0.73rem\",\r\n          color: \"#4a5568\",\r\n          fontFamily: \"'JetBrains Mono', monospace\",\r\n          display: \"inline-block\",\r\n          maxWidth,\r\n          overflow: \"hidden\",\r\n          textOverflow: \"ellipsis\",\r\n          whiteSpace: \"nowrap\",\r\n          verticalAlign: \"middle\",\r\n        }}\r\n      >\r\n        {value}\r\n      </Typography>\r\n    </Tooltip>\r\n  );\r\n}\r\n\r\nconst DISPOSITION_TINTS = [\r\n  { color: \"#1565c8\", bg: \"#e8f0fe\" },\r\n  { color: \"#0a9a62\", bg: \"#e6f5ed\" },\r\n  { color: \"#6b3fbf\", bg: \"#f0ebfa\" },\r\n  { color: \"#c47c00\", bg: \"#fff4e0\" },\r\n  { color: \"#0f7c8a\", bg: \"#e3f4f6\" },\r\n  { color: \"#b3357a\", bg: \"#fceaf3\" },\r\n] as const;\r\n\r\nconst dispositionTint = (key: string) => {\r\n  let h = 0;\r\n  for (let i = 0; i < key.length; i += 1) h = (h * 31 + key.charCodeAt(i)) >>> 0;\r\n  return DISPOSITION_TINTS[h % DISPOSITION_TINTS.length];\r\n};\r\n\r\nfunction DispositionCell({ value }: { value: string | null }) {\r\n  const raw = value?.trim();\r\n  if (!raw) return null;\r\n\r\n  const parts = raw\r\n    .split(\">\")\r\n    .map((p) => p.trim())\r\n    .filter(Boolean);\r\n  const root = parts[0] || raw;\r\n  const leaf = parts[parts.length - 1] || raw;\r\n  const nested = parts.length > 1;\r\n  const tint = dispositionTint(root.toLowerCase());\r\n\r\n  return (\r\n    <Tooltip title={nested ? parts.join(\"  ›  \") : \"\"} placement=\"top\">\r\n      <Box\r\n        component=\"span\"\r\n        sx={{\r\n          display: \"inline-flex\",\r\n          alignItems: \"center\",\r\n          gap: 0.55,\r\n          maxWidth: 210,\r\n          minWidth: 0,\r\n          px: 0.75,\r\n          py: 0.3,\r\n          borderRadius: \"6px\",\r\n          bgcolor: tint.bg,\r\n          color: tint.color,\r\n          verticalAlign: \"middle\",\r\n        }}\r\n      >\r\n        <Box\r\n          sx={{\r\n            width: 6,\r\n            height: 6,\r\n            borderRadius: \"50%\",\r\n            bgcolor: tint.color,\r\n            opacity: 0.85,\r\n            flexShrink: 0,\r\n          }}\r\n        />\r\n        <Box\r\n          component=\"span\"\r\n          sx={{\r\n            fontSize: \"0.68rem\",\r\n            fontWeight: 600,\r\n            lineHeight: 1.4,\r\n            overflow: \"hidden\",\r\n            textOverflow: \"ellipsis\",\r\n            whiteSpace: \"nowrap\",\r\n          }}\r\n        >\r\n          {leaf}\r\n        </Box>\r\n        {nested && (\r\n          <Box\r\n            component=\"span\"\r\n            sx={{\r\n              fontSize: \"0.6rem\",\r\n              fontWeight: 700,\r\n              opacity: 0.55,\r\n              flexShrink: 0,\r\n            }}\r\n          >\r\n            +{parts.length - 1}\r\n          </Box>\r\n        )}\r\n      </Box>\r\n    </Tooltip>\r\n  );\r\n}\r\n\r\nfunction ConferenceCell({\r\n  row,\r\n  onOpen,\r\n}: {\r\n  row: CdrRecordResponse;\r\n  onOpen: () => void;\r\n}) {\r\n  const notConference = row.isConference === false;\r\n  const disabled = !row.callUuid || notConference;\r\n\r\n  const hint = !row.callUuid\r\n    ? \"Call ID unavailable for this record\"\r\n    : notConference\r\n      ? \"Not a conference call — no other participants were bridged in\"\r\n      : \"View Conference Timeline\";\r\n\r\n  return (\r\n    <Tooltip title={hint}>\r\n      <span>\r\n        <IconButton\r\n          size=\"small\"\r\n          disabled={disabled}\r\n          onClick={onOpen}\r\n          sx={{\r\n            color: disabled ? \"#b0b8c8\" : C.purple,\r\n            p: 0.4,\r\n            \"&.Mui-disabled\": { color: \"#c9d0db\" },\r\n          }}\r\n        >\r\n          <GroupsIcon sx={{ fontSize: 17 }} />\r\n        </IconButton>\r\n      </span>\r\n    </Tooltip>\r\n  );\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  if (!status) return null;\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  if (!type) return null;\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\n/* Coordinates playback so only one recording is open at a time. */\r\nconst activePlayers = new Set<(activeId: string) => void>();\r\nconst notifyPlay = (activeId: string) => {\r\n  activePlayers.forEach((fn) => fn(activeId));\r\n};\r\n\r\nfunction AgentDetailCdrRow({\r\n  row,\r\n  canViewAudit,\r\n  canViewRecording,\r\n  onAuditClick,\r\n  onConferenceClick,\r\n  colSpan,\r\n}: {\r\n  row: CdrRecordResponse;\r\n  canViewAudit: boolean;\r\n  canViewRecording: boolean;\r\n  onAuditClick: (row: CdrRecordResponse) => void;\r\n  onConferenceClick: (row: CdrRecordResponse) => void;\r\n  colSpan: number;\r\n}) {\r\n  const { maskNumber } = useNumberMask();\r\n  const [audioUrl, setAudioUrl] = useState<string | null>(null);\r\n  const [loadingAudio, setLoadingAudio] = useState(false);\r\n  const [hasError, setHasError] = useState(false);\r\n  const unavailable = row.recordingPath === null || !row.callUuid;\r\n\r\n  const closePlayer = useCallback(() => {\r\n    setAudioUrl((prev) => {\r\n      if (prev && prev.startsWith(\"blob:\")) URL.revokeObjectURL(prev);\r\n      return null;\r\n    });\r\n  }, []);\r\n\r\n  useEffect(() => {\r\n    const onPlay = (activeId: string) => {\r\n      if (activeId !== row.callUuid) closePlayer();\r\n    };\r\n    activePlayers.add(onPlay);\r\n    return () => {\r\n      activePlayers.delete(onPlay);\r\n    };\r\n  }, [row.callUuid, closePlayer]);\r\n\r\n  const handlePlay = async () => {\r\n    if (audioUrl) return;\r\n    if (unavailable) return;\r\n    notifyPlay(row.callUuid);\r\n    setLoadingAudio(true);\r\n    setHasError(false);\r\n    try {\r\n      const blob = await getRecordingByCall(row.callUuid);\r\n      setAudioUrl(URL.createObjectURL(blob));\r\n    } catch {\r\n      setHasError(true);\r\n    } finally {\r\n      setLoadingAudio(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <TableRow\r\n        hover\r\n        sx={{\r\n          backgroundColor: \"#fff\",\r\n          \"&:hover\": { backgroundColor: \"#f0f7f8\" },\r\n        }}\r\n      >\r\n        {canViewAudit && (\r\n          <TableCell sx={{ textAlign: \"center\", verticalAlign: \"middle\" }}>\r\n            <Tooltip title=\"View Audit Report\">\r\n              <span>\r\n                <IconButton\r\n                  size=\"small\"\r\n                  disabled={!row.callUuid}\r\n                  onClick={() => onAuditClick(row)}\r\n                  sx={{ color: C.blue, p: 0.4 }}\r\n                >\r\n                  <AssignmentIcon sx={{ fontSize: 16 }} />\r\n                </IconButton>\r\n              </span>\r\n            </Tooltip>\r\n          </TableCell>\r\n        )}\r\n        <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n          <IdCell value={row.callUuid || null} maxWidth={160} />\r\n        </TableCell>\r\n        <TableCell sx={{ fontWeight: 600, color: C.navy, fontSize: \"0.75rem\" }}>\r\n          {maskNumber(row.phoneNumber) || \"\"}\r\n        </TableCell>\r\n        <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\", whiteSpace: \"nowrap\" }}>\r\n          {row.callStartTime ? (\r\n            <Box component=\"div\" sx={{ display: \"flex\", flexDirection: \"column\", lineHeight: 1.2 }}>\r\n              <Typography component=\"span\" sx={{ fontSize: \"0.73rem\", color: \"#4a5568\", fontWeight: 500 }}>\r\n                {dayjs(row.callStartTime).format(\"DD MMM YYYY\")}\r\n              </Typography>\r\n              <Typography component=\"span\" sx={{ fontSize: \"0.71rem\", color: \"#7a8599\" }}>\r\n                {dayjs(row.callStartTime).format(\"hh:mm A\")}\r\n              </Typography>\r\n            </Box>\r\n          ) : (\r\n            \"\"\r\n          )}\r\n        </TableCell>\r\n        <TableCell><CallTypeChip type={row.callType || \"\"} /></TableCell>\r\n        <TableCell><StatusChip status={row.callStatus || \"\"} /></TableCell>\r\n        <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.agentName || \"\"}</TableCell>\r\n        <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>{row.agentUserId || \"\"}</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={{ fontSize: \"0.73rem\", color: \"#4a5568\", fontFamily: \"monospace\", letterSpacing: \"0.3px\" }}>\r\n          {row.didNumber ?? (row as any).did_number ?? (row as any).did ?? \"\"}\r\n        </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\" }}>\r\n          {row.userRingingDurationFmt || (row.userRingingDurationSeconds ? fmtSecsDetail(row.userRingingDurationSeconds) : \"\")}\r\n        </TableCell>\r\n        <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>\r\n          {row.customerRingingDurationFmt || (row.customerRingingDurationSeconds ? fmtSecsDetail(row.customerRingingDurationSeconds) : \"\")}\r\n        </TableCell>\r\n        <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>{row.queueDurationFmt || \"\"}</TableCell>\r\n        <TableCell sx={{ fontWeight: 500, fontSize: \"0.75rem\", fontVariantNumeric: \"tabular-nums\" }}>\r\n          {row.ivrDurationFmt || (row.ivrDurationSeconds ? fmtSecsDetail(row.ivrDurationSeconds) : \"\")}\r\n        </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\" }}>\r\n          <IdCell value={row.channelId ?? null} maxWidth={200} />\r\n        </TableCell>\r\n        <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n          <DispositionCell value={row.disposition ?? null} />\r\n        </TableCell>\r\n        <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n          <DispositionCell value={row.agentSelectedDisposition ?? null} />\r\n        </TableCell>\r\n        <TableCell sx={{ fontSize: \"0.73rem\", color: \"#4a5568\" }}>\r\n          {row.remarks ? (\r\n            <Tooltip title={row.remarks}>\r\n              <span\r\n                style={{\r\n                  display: \"inline-block\",\r\n                  maxWidth: 180,\r\n                  overflow: \"hidden\",\r\n                  textOverflow: \"ellipsis\",\r\n                  whiteSpace: \"nowrap\",\r\n                  verticalAlign: \"bottom\",\r\n                }}\r\n              >\r\n                {row.remarks}\r\n              </span>\r\n            </Tooltip>\r\n          ) : (\r\n            \"\"\r\n          )}\r\n        </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        {canViewRecording && (\r\n          <TableCell align=\"center\" sx={{ verticalAlign: \"middle\" }}>\r\n            {!unavailable && !hasError ? (\r\n              <IconButton\r\n                color=\"primary\"\r\n                onClick={handlePlay}\r\n                disabled={loadingAudio}\r\n                size=\"small\"\r\n                sx={{ color: C.green, p: 0.4 }}\r\n              >\r\n                {loadingAudio ? <CircularProgress size={16} /> : <PlayArrowIcon sx={{ fontSize: 18 }} />}\r\n              </IconButton>\r\n            ) : (\r\n              <Chip size=\"small\" label=\"No File\" sx={{ fontSize: \"0.65rem\", height: 20 }} />\r\n            )}\r\n          </TableCell>\r\n        )}\r\n        <TableCell sx={{ textAlign: \"center\", verticalAlign: \"middle\" }}>\r\n          <ConferenceCell row={row} onOpen={() => onConferenceClick(row)} />\r\n        </TableCell>\r\n      </TableRow>\r\n\r\n      {/* Audio player row */}\r\n      {audioUrl && (\r\n        <TableRow>\r\n          <TableCell colSpan={colSpan} sx={{ p: 0, backgroundColor: \"#fafbfc\" }}>\r\n            <Box p={2}>\r\n              <audio\r\n                controls\r\n                autoPlay\r\n                src={audioUrl}\r\n                onEnded={closePlayer}\r\n                style={{ width: \"100%\" }}\r\n              />\r\n            </Box>\r\n          </TableCell>\r\n        </TableRow>\r\n      )}\r\n    </>\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\nimport { getSession } from \"@react-solutions/vault\";\r\nimport AgentMultiSelect, { type AgentOption } from \"../common/components/AgentMultiSelect\";\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  // Call-log numbers are masked to their last three digits without\r\n  // `phone_number:view_unmasked`.\r\n  const { maskNumber } = useNumberMask();\r\n  const urlParams = typeof window !== \"undefined\" ? new URLSearchParams(window.location.search) : null;\r\n  const agentIdFromUrl = urlParams?.get(\"agentId\") || urlParams?.get(\"agent_id\") || urlParams?.get(\"agent\") || \"\";\r\n\r\n  const historyState = typeof window !== \"undefined\" ? (window.history?.state as any) : null;\r\n  const agentFromState =\r\n    historyState?.usr?.agentId ||\r\n    historyState?.agent?.agentDetails?.agentId ||\r\n    historyState?.agent?.agentId ||\r\n    historyState?.agentId ||\r\n    \"\";\r\n\r\n  const vaultUser = typeof window !== \"undefined\" ? (getSession(\"auth_user\") as any) : null;\r\n  const agentFromVault =\r\n    vaultUser?.agentId ||\r\n    vaultUser?.agent_id ||\r\n    vaultUser?.userId ||\r\n    vaultUser?.user_id ||\r\n    (vaultUser?.id ? String(vaultUser.id) : \"\");\r\n\r\n  const storedUser = typeof sessionStorage !== \"undefined\"\r\n    ? (() => {\r\n        try {\r\n          return JSON.parse(sessionStorage.getItem(\"auth_user\") || sessionStorage.getItem(\"user\") || \"{}\");\r\n        } catch {\r\n          return {};\r\n        }\r\n      })()\r\n    : {};\r\n  const agentFromStorage =\r\n    storedUser?.agentId ||\r\n    storedUser?.agent_id ||\r\n    storedUser?.userId ||\r\n    storedUser?.user_id ||\r\n    (typeof sessionStorage !== \"undefined\" ? sessionStorage.getItem(\"agentId\") : \"\") ||\r\n    \"\";\r\n\r\n  const [selectedAgentOption, setSelectedAgentOption] = useState<AgentOption[]>([]);\r\n\r\n  const agentRow: ReportData | null = propAgentRow || historyState?.agent || null;\r\n  const isFromReportsList = from === \"REPORTS_LIST\";\r\n  const agentIdFromRow =\r\n    selectedAgentOption[0]?.userId ||\r\n    agentRow?.agentDetails?.agentId ||\r\n    (agentRow as any)?.agentId ||\r\n    (agentRow as any)?.agent_id ||\r\n    (agentRow as any)?.userId ||\r\n    (agentRow as any)?.user_id ||\r\n    agentIdFromUrl ||\r\n    agentFromState ||\r\n    (!isFromReportsList ? (sdkStateManager.getState().agentId || sdkStateManager.getCredentials()?.agentId) : \"\") ||\r\n    agentFromVault ||\r\n    agentFromStorage ||\r\n    \"\";\r\n\r\n  const handleAgentSelect = (agents: AgentOption[]) => {\r\n    setSelectedAgentOption(agents);\r\n    const chosen = agents[0]?.userId || \"\";\r\n    if (typeof window !== \"undefined\" && window.location) {\r\n      const url = new URL(window.location.href);\r\n      if (chosen) url.searchParams.set(\"agentId\", chosen);\r\n      else url.searchParams.delete(\"agentId\");\r\n      window.history.replaceState(window.history.state, \"\", url.toString());\r\n    }\r\n  };\r\n\r\n  const [quickRange, setQuickRange] = useState<string>(() => urlParams?.get(\"range\") || initialQuickRange || \"today\");\r\n  const [startDate, setStartDate] = useState<Dayjs | null>(() => {\r\n    const sd = urlParams?.get(\"start_date\");\r\n    if (sd) return dayjs(sd);\r\n    // A preset range is recomputed on open so \"now\" is current, not the\r\n    // moment the parent page's filter was last set.\r\n    return presetRange(quickRange)?.[0] ?? initialStartDate ?? dayjs().startOf(\"day\");\r\n  });\r\n  const [endDate, setEndDate] = useState<Dayjs | null>(() => {\r\n    const ed = urlParams?.get(\"end_date\");\r\n    if (ed) return dayjs(ed);\r\n    return presetRange(quickRange)?.[1] ?? initialEndDate ?? dayjs();\r\n  });\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(true);\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  const [exportingCdr, setExportingCdr] = useState(false);\r\n\r\n  const handleExportCdr = async () => {\r\n    if (!agentIdFromRow) return;\r\n    try {\r\n      setExportingCdr(true);\r\n      const sd = startDate ?? dayjs().startOf(\"day\");\r\n      const ed = endDate ?? dayjs();\r\n      const params: CdrReportParams = {\r\n        ...toApiRange(sd, ed),\r\n        search: agentIdFromRow,\r\n      };\r\n      await exportCdrReportToExcel(params);\r\n    } catch (err: any) {\r\n      setCdrError(err?.message || \"Failed to export call history Excel\");\r\n    } finally {\r\n      setExportingCdr(false);\r\n    }\r\n  };\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 [breakTypeCounts, setBreakTypeCounts] = useState<BreakTypeCount[]>([]);\r\n  const [breaksLoading, setBreaksLoading] = useState(false);\r\n  const [exportingBreaks, setExportingBreaks] = useState(false);\r\n  const [breakSort, setBreakSort] = useState<BreakSort>({ sortBy: \"breakStart\", sortOrder: \"asc\" });\r\n\r\n  const handleExportBreaks = async () => {\r\n    if (!agentIdFromRow) return;\r\n    try {\r\n      setExportingBreaks(true);\r\n      await exportAgentBreakSessionsToExcel(agentIdFromRow, {\r\n        ...toApiRange(startDate ?? dayjs().startOf(\"day\"), endDate ?? dayjs()),\r\n        ...breakSort,\r\n      });\r\n    } catch (err: any) {\r\n      setDetailError(err?.message || \"Failed to export breaks Excel\");\r\n    } finally {\r\n      setExportingBreaks(false);\r\n    }\r\n  };\r\n\r\n  const { hasAnyPermission } = useSDKPermissions();\r\n  const canViewRecording = hasAnyPermission([\r\n    SDK_PERMISSIONS.REPORTS_CDR_RECORDING,\r\n    SDK_PERMISSIONS.REPORTS_CDR_MANAGE,\r\n  ]);\r\n  const canViewAudit = hasAnyPermission([\r\n    SDK_PERMISSIONS.REPORTS_CDR_AUDIT,\r\n    SDK_PERMISSIONS.REPORTS_CDR_MANAGE,\r\n  ]);\r\n\r\n  const [auditDialogOpen, setAuditDialogOpen] = useState(false);\r\n  const [selectedAuditRow, setSelectedAuditRow] = useState<CdrRecordResponse | null>(null);\r\n  const [conferenceRow, setConferenceRow] = useState<CdrRecordResponse | null>(null);\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 [sd, ed] = presetRange(range) ?? [dayjs().startOf(\"day\"), dayjs()];\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        ...toApiRange(sd, ed),\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        ...toApiRange(sd, ed),\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().startOf(\"day\");\r\n      const ed = endDate ?? dayjs();\r\n      const res = await getAgentBreakSessionsWithCounts(agentIdFromRow, {\r\n        ...toApiRange(sd, ed),\r\n        ...breakSort,\r\n      });\r\n      setBreakSessions(res.breaks);\r\n      setBreakTypeCounts(res.breakTypeCounts);\r\n    } catch {\r\n      setBreakSessions([]);\r\n      setBreakTypeCounts([]);\r\n    } finally {\r\n      setBreaksLoading(false);\r\n    }\r\n  }, [agentIdFromRow, startDate, endDate, breakSort]);\r\n\r\n  // A header click changes breakSort → reload the (already shown) breaks list.\r\n  const breakSortRef = useRef(breakSort);\r\n  useEffect(() => {\r\n    if (breakSortRef.current === breakSort) return;\r\n    breakSortRef.current = breakSort;\r\n    loadBreakSessions();\r\n  }, [breakSort, loadBreakSessions]);\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    // Preset ranges roll forward to \"now\"; the date change re-triggers the fetch effects.\r\n    if (!sd && !ed && presetRange(quickRange)) { setQuick(quickRange); return; }\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    // Refresh all three APIs regardless of the active tab. When on Call History\r\n    // with page > 0, setCdrPage(0) already triggers the CDR effect — skip the\r\n    // direct call there to avoid a duplicate request.\r\n    if (!(activeTab === 1 && cdrPage !== 0)) fetchCdrFn(fromDate, toDate, 0, cdrPageSize);\r\n    setCdrPage(0);\r\n    loadBreakSessions();\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: { hourOfDay: number; answeredCalls: number; missedCalls: number }) => ({\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: { queueName: string; callCount: number; pctOfTotal?: number }, i: number) => ({\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: number, q: { totalCalls: number }) => sum + (q.totalCalls || 0), 0);\r\n    return items.map((q: any, i: number) => ({\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, display: \"flex\", flexDirection: \"column\", alignItems: \"center\", justifyContent: \"center\", minHeight: 320 }}>\r\n        <Typography sx={{ fontSize: \"1.1rem\", fontWeight: 700, color: C.t1, mb: 1 }}>\r\n          Select an Agent to View Report\r\n        </Typography>\r\n        <Typography sx={{ color: C.t3, mb: 3, maxWidth: 450, textAlign: \"center\", fontSize: \"0.85rem\" }}>\r\n          Please select an agent from the dropdown below to view their detailed performance and activity.\r\n        </Typography>\r\n        <Box sx={{ width: 280, mb: 2 }}>\r\n          <AgentMultiSelect\r\n            value={selectedAgentOption}\r\n            onChange={handleAgentSelect}\r\n            placeholder=\"Choose an agent...\"\r\n            minWidth={280}\r\n          />\r\n        </Box>\r\n        {isFromReportsList && (\r\n          <AppButton onClick={handleBack} sx={{ mt: 1 }}>\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          {!isFromReportsList && (\r\n            <AgentMultiSelect\r\n              value={selectedAgentOption}\r\n              onChange={handleAgentSelect}\r\n              placeholder=\"Switch Agent\"\r\n              minWidth={200}\r\n            />\r\n          )}\r\n          <DateRangePicker\r\n            showTime\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: \"Average Handling Time\", c: C.purple },\r\n              { v: `${(profile?.answerRate ?? 0).toFixed(1)}%`, l: \"Call 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: \"Productive Duration\", c: C.blue },\r\n              { v: profile?.handleTimeFormatted || \"00:00:00\", l: \"On Call Time\", c: C.purple },\r\n              // { v: `${(profile?.adherencePct ?? 0).toFixed(1)}%`, l: `Adherence${profile?.adherenceGrade ? ` (${profile.adherenceGrade})` : \"\"}`, c: C.teal },\r\n              { v: profile?.idleFormatted || \"00:00:00\", l: \"Idle Time\", c: C.blue },\r\n              { v: profile?.breakTimeFormatted || \"00:00:00\", l: \"Break Time\", c: C.amber },\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 || breaksLoading}\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: any, idx: number) => <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: any) => (\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                <AppButton\r\n                  size=\"small\"\r\n                  startIcon={exportingCdr ? <CircularProgress size={14} sx={{ color: \"#fff\" }} /> : <FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n                  disabled={exportingCdr || cdrLoading || cdrRecords.length === 0}\r\n                  onClick={handleExportCdr}\r\n                >\r\n                  {exportingCdr ? \"Exporting...\" : \"Export to Excel\"}\r\n                </AppButton>\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: 2200,\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                      {canViewAudit && (\r\n                        <TableCell sx={{ ...(cdrHeadSx as object), minWidth: 110, textAlign: \"center\" }}>\r\n                          Audit Report\r\n                        </TableCell>\r\n                      )}\r\n                      {[\r\n                        \"Caller ID\", \"Phone Number\", \"Call Start\", \"Call Type\", \"Status\",\r\n                        \"User Name\", \"User ID\", \"Queue\", \"Extension\", \"DID Number\",\r\n                        \"Talk Duration\", \"Hold Duration\", \"User Ring Duration\", \"Customer Ring Duration\",\r\n                        \"Queue Duration\", \"IVR Duration\", \"Wrapup Duration\",\r\n                        \"Actual Channel\", \"Disposition\", \"Agent Disposition\", \"Remarks\", \"Transferred\",\r\n                      ].map((label) => (\r\n                        <TableCell key={label} sx={cdrHeadSx}>{label}</TableCell>\r\n                      ))}\r\n                      {canViewRecording && (\r\n                        <TableCell sx={{ ...(cdrHeadSx as object), minWidth: 90, textAlign: \"center\" }}>Recording</TableCell>\r\n                      )}\r\n                      <TableCell sx={{ ...(cdrHeadSx as object), minWidth: 100, textAlign: \"center\" }}>\r\n                        Conference\r\n                      </TableCell>\r\n                    </TableRow>\r\n                  </TableHead>\r\n                  <TableBody>\r\n                    {cdrRecords.map((row, idx) => (\r\n                      <AgentDetailCdrRow\r\n                        key={row.callUuid || idx}\r\n                        row={row}\r\n                        canViewAudit={canViewAudit}\r\n                        canViewRecording={canViewRecording}\r\n                        onAuditClick={(r) => {\r\n                          setSelectedAuditRow(r);\r\n                          setAuditDialogOpen(true);\r\n                        }}\r\n                        onConferenceClick={(r) => setConferenceRow(r)}\r\n                        colSpan={(canViewAudit ? 1 : 0) + 22 + (canViewRecording ? 1 : 0) + 1}\r\n                      />\r\n                    ))}\r\n                    {!cdrLoading && cdrRecords.length === 0 && (\r\n                      <TableRow><TableCell colSpan={(canViewAudit ? 1 : 0) + 22 + (canViewRecording ? 1 : 0) + 1} 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={exportingBreaks ? <CircularProgress size={14} sx={{ color: \"#fff\" }} /> : <FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n                    disabled={exportingBreaks || breaksLoading || breakSessions.length === 0}\r\n                    onClick={handleExportBreaks}\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                  <>\r\n                  <BreakTypeCounts counts={breakTypeCounts} breaks={breakSessions} />\r\n                  <BreakSessionsTable breaks={breakSessions} showRemarksStatus={false} sort={breakSort} onSortChange={setBreakSort} />\r\n                </>\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={exportingBreaks ? <CircularProgress size={14} sx={{ color: \"#fff\" }} /> : <FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n              disabled={exportingBreaks || breaksLoading || breakSessions.length === 0}\r\n              onClick={handleExportBreaks}\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              <BreakTypeCounts counts={breakTypeCounts} breaks={breakSessions} />\r\n              <BreakSessionsTable breaks={breakSessions} maxHeight={360} showRemarksStatus={false} sort={breakSort} onSortChange={setBreakSort} />\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\r\n      {canViewAudit && (\r\n        <AuditReportDialog\r\n          open={auditDialogOpen}\r\n          onClose={() => {\r\n            setAuditDialogOpen(false);\r\n            setSelectedAuditRow(null);\r\n          }}\r\n          rowData={(selectedAuditRow ?? undefined) as any}\r\n        />\r\n      )}\r\n\r\n      <ConferenceTimelineDialog\r\n        open={!!conferenceRow}\r\n        onClose={() => setConferenceRow(null)}\r\n        callUuid={conferenceRow?.callUuid}\r\n        phoneNumber={conferenceRow?.phoneNumber}\r\n        agentName={conferenceRow?.agentName}\r\n      />\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 { Box, Typography, Chip, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TableSortLabel, Tooltip } from \"@mui/material\";\r\nimport dayjs from \"dayjs\";\r\nimport type { BreakSessionResponse, BreakTypeCount } from \"../../agentDetailReport/types\";\r\nimport type { SortOrder } from \"../utils/sort\";\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/** Break columns the backend can sort on (camelCase field names). */\r\nexport type BreakSortKey = \"breakType\" | \"breakStart\" | \"breakEnd\" | \"durationSeconds\" | \"remarks\" | \"status\";\r\nexport interface BreakSort {\r\n  sortBy: BreakSortKey;\r\n  sortOrder: SortOrder;\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\n * Pass `sort` + `onSortChange` to make the headers clickable; the caller\r\n * re-fetches with the new sort (server-side), so the rows arrive pre-ordered.\r\n */\r\nexport default function BreakSessionsTable({ breaks, maxHeight = 380, showRemarksStatus = true, sort, onSortChange }: {\r\n  breaks: BreakSessionResponse[];\r\n  maxHeight?: number;\r\n  showRemarksStatus?: boolean;\r\n  sort?: BreakSort;\r\n  onSortChange?: (sort: BreakSort) => void;\r\n}) {\r\n  const head = (key: BreakSortKey, label: string) => {\r\n    if (!sort || !onSortChange) return <TableCell>{label}</TableCell>;\r\n    const active = sort.sortBy === key;\r\n    return (\r\n      <TableCell sortDirection={active ? sort.sortOrder : false}>\r\n        <TableSortLabel\r\n          active={active}\r\n          direction={active ? sort.sortOrder : \"asc\"}\r\n          onClick={() => onSortChange({ sortBy: key, sortOrder: active && sort.sortOrder === \"asc\" ? \"desc\" : \"asc\" })}\r\n          sx={{ color: \"inherit !important\", \"& .MuiTableSortLabel-icon\": { color: \"#555 !important\" } }}\r\n        >\r\n          {label}\r\n        </TableSortLabel>\r\n      </TableCell>\r\n    );\r\n  };\r\n\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            {head(\"breakType\", \"Break Type\")}\r\n            {head(\"breakStart\", \"Started At\")}\r\n            {head(\"breakEnd\", \"Ended At\")}\r\n            {head(\"durationSeconds\", \"Duration\")}\r\n            {showRemarksStatus && head(\"remarks\", \"Remarks\")}\r\n            {showRemarksStatus && head(\"status\", \"Status\")}\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\n// Stable colour per break type — the same type keeps its colour everywhere.\r\nconst TYPE_COLORS = [\"#6b3fbf\", \"#0b7a8f\", \"#F57C00\", \"#1565c8\", \"#00897B\", \"#cc2a2a\", \"#5E35B1\", \"#0a9a62\"];\r\nfunction typeColor(name: string): string {\r\n  let h = 0;\r\n  for (let i = 0; i < name.length; i++) h = name.charCodeAt(i) + ((h << 5) - h);\r\n  return TYPE_COLORS[Math.abs(h) % TYPE_COLORS.length];\r\n}\r\n\r\nfunction CountChip({ label, count, color, tip }: { label: string; count: number; color: string; tip: string }) {\r\n  return (\r\n    <Tooltip title={tip} arrow placement=\"top\" enterDelay={300}>\r\n      <Chip\r\n        size=\"small\"\r\n        label={\r\n          <Box component=\"span\" sx={{ display: \"inline-flex\", alignItems: \"center\", gap: 0.6 }}>\r\n            <Box component=\"span\" sx={{ width: 7, height: 7, borderRadius: \"50%\", backgroundColor: color, flexShrink: 0 }} />\r\n            <Box component=\"span\" sx={{ color: \"#364f6e\" }}>{label}</Box>\r\n            <Box component=\"span\" sx={{\r\n              minWidth: 18, px: 0.6, borderRadius: \"9px\", backgroundColor: color, color: \"#fff\",\r\n              fontWeight: 800, textAlign: \"center\", fontVariantNumeric: \"tabular-nums\", lineHeight: \"16px\",\r\n            }}>\r\n              {count}\r\n            </Box>\r\n          </Box>\r\n        }\r\n        sx={{\r\n          fontFamily: FONT, fontSize: \"0.7rem\", fontWeight: 600, height: 24, cursor: \"default\",\r\n          backgroundColor: `${color}14`, border: `1px solid ${color}40`,\r\n          transition: \"background-color .15s, box-shadow .15s\",\r\n          \"&:hover\": { backgroundColor: `${color}24`, boxShadow: `0 1px 4px ${color}33` },\r\n          \"& .MuiChip-label\": { px: 1 },\r\n        }}\r\n      />\r\n    </Tooltip>\r\n  );\r\n}\r\n\r\n/**\r\n * Per-type break counts shown above the table — \"Total 10 · Not Ready 6 · Lunch 2\".\r\n * Each chip's tooltip adds the total time; durations are summed from\r\n * `breaks` (ongoing breaks add 0). Renders nothing when there are no breaks.\r\n */\r\nexport function BreakTypeCounts({ counts, breaks = [] }: { counts: BreakTypeCount[]; breaks?: BreakSessionResponse[] }) {\r\n  if (!counts.length) return null;\r\n  const secsByType = new Map<string, number>();\r\n  for (const b of breaks) {\r\n    const t = b.breakType || \"Break\";\r\n    secsByType.set(t, (secsByType.get(t) ?? 0) + (b.durationSeconds ?? 0));\r\n  }\r\n  const total = counts.reduce((n, c) => n + c.count, 0);\r\n  const totalSecs = [...secsByType.values()].reduce((n, s) => n + s, 0);\r\n  const plural = (n: number) => `${n} break${n !== 1 ? \"s\" : \"\"}`;\r\n  return (\r\n    <Box sx={{ display: \"flex\", flexWrap: \"wrap\", alignItems: \"center\", gap: 0.75, mb: 1 }}>\r\n      <CountChip label=\"Total\" count={total} color=\"#14505b\" tip={`${plural(total)} · ${fmtDur(totalSecs) || \"00:00:00\"}`} />\r\n      {counts.map((c) => (\r\n        <CountChip\r\n          key={c.breakType}\r\n          label={c.breakType}\r\n          count={c.count}\r\n          color={typeColor(c.breakType)}\r\n          tip={`${c.breakType}: ${plural(c.count)} · ${fmtDur(secsByType.get(c.breakType) ?? 0) || \"00:00:00\"}`}\r\n        />\r\n      ))}\r\n    </Box>\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 { appendSort, type SortParams } from \"../common/utils/sort\";\r\nimport type {\r\n\tAgentDetailReportParams,\r\n\tAgentDetailReportResponse,\r\n\tBreakSessionResponse,\r\n\tBreakTypeCount,\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\n/** Counts per break type — used when the backend omits breakTypeCounts. */\r\nfunction countBreakTypes(breaks: BreakSessionResponse[]): BreakTypeCount[] {\r\n\tconst counts = new Map<string, number>();\r\n\tfor (const b of breaks) {\r\n\t\tconst t = b.breakType || \"Break\";\r\n\t\tcounts.set(t, (counts.get(t) ?? 0) + 1);\r\n\t}\r\n\treturn [...counts.entries()]\r\n\t\t.map(([breakType, count]) => ({ breakType, count }))\r\n\t\t.sort((a, b) => b.count - a.count);\r\n}\r\n\r\nexport async function getAgentBreakSessions(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string } & SortParams,\r\n): Promise<BreakSessionResponse[]> {\r\n\treturn (await getAgentBreakSessionsWithCounts(agentId, params)).breaks;\r\n}\r\n\r\n/** Break sessions plus the per-type counts (e.g. \"Not Ready 6\") for the same range. */\r\nexport async function getAgentBreakSessionsWithCounts(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string } & SortParams,\r\n): Promise<{ breaks: BreakSessionResponse[]; breakTypeCounts: BreakTypeCount[] }> {\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\tappendSort(qs, params);\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\tconst breaks = deepFindArray<BreakSessionResponse>(body, [\"breaks\", \"sessions\", \"data\"]);\r\n\tconst breakTypeCounts: BreakTypeCount[] = Array.isArray(body?.breakTypeCounts)\r\n\t\t? body.breakTypeCounts\r\n\t\t: countBreakTypes(breaks);\r\n\treturn { breaks, breakTypeCounts };\r\n}\r\n\r\nexport async function exportAgentBreakSessionsToExcel(\r\n\tagentId: string,\r\n\tparams?: { start_date?: string; end_date?: string } & SortParams,\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\tappendSort(qs, params);\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\r\nexport async function exportCdrReportToExcel(params: CdrReportParams): Promise<void> {\r\n\tconst qs = buildCdrQs(params);\r\n\tconst res = await axiosInstance.get(`${END_POINT.CDR_REPORT_EXPORT_EXCEL}${qs}`, { responseType: \"blob\" });\r\n\tconst url = window.URL.createObjectURL(new Blob([res.data]));\r\n\tconst a = document.createElement(\"a\");\r\n\ta.href = url;\r\n\ta.download = `cdr-report-${params.start_date ?? \"export\"}.xlsx`;\r\n\tdocument.body.appendChild(a);\r\n\ta.click();\r\n\ta.remove();\r\n\twindow.URL.revokeObjectURL(url);\r\n}\r\n\r\n"],"mappings":"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","names":["useState","useCallback","Box","Typography","Table","TableBody","TableCell","TableContainer","TableHead","TableRow","Chip","_a","Tooltip","dayjs","jsx","jsxs","C","FONT","dayjs","Tooltip","Typography","Box","jsx","Chip","C","useState","useCallback","jsxs","TableRow","TableCell","Tooltip","Box","Typography","dayjs","_a","_b","_c","_d","_e","TableContainer","Table","TableHead","TableBody","FONT"]}