{"version":3,"sources":["../call-control-sdk/lib/pages/agentPerformanceReport/index.tsx","../call-control-sdk/lib/pages/agentPerformanceReport/BreakSessionsDialog.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback, useRef } from \"react\";\r\nimport { Box, Paper, Typography, CircularProgress, Alert, Tooltip, IconButton, Select, MenuItem, FormControl } from \"@mui/material\";\r\nimport type { MRT_ColumnDef, MRT_SortingState } from \"material-react-table\";\r\nimport RefreshIcon from \"@mui/icons-material/Refresh\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport VisibilityIcon from \"@mui/icons-material/Visibility\";\r\nimport { LocalizationProvider } from \"@mui/x-date-pickers/LocalizationProvider\";\r\nimport { AdapterDayjs } from \"@mui/x-date-pickers/AdapterDayjs\";\r\nimport dayjs, { Dayjs } from \"dayjs\";\r\n\r\nimport PageHeader from \"../common/components/PageHeader\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport AppTable from \"../common/components/AppTable\";\r\nimport SearchBar from \"../common/components/SearchBar\";\r\nimport { headCellSx, bodyCellSx } from \"../common/utils/tableStyles\";\r\nimport ReportFilterBar, { type QuickRange } from \"../common/components/ReportFilterBar\";\r\nimport axiosInstance from \"../../services/axios\";\r\nimport { END_POINT } from \"../../services/endPoint\";\r\nimport type { SortParams } from \"../common/utils/sort\";\r\nimport { SDKProvider } from \"../../components/SDKProvider\";\r\nimport { SDKPermissionGuard } from \"../../components/SDKPermissionGuard\";\r\nimport { useToast } from \"../../services/toastMessage\";\r\nimport { SDK_PERMISSIONS } from \"../../permissions/sdk-constants\";\r\nimport AgentDetailReport from \"../agentDetailReport\";\r\nimport BreakSessionsDialog from \"./BreakSessionsDialog\";\r\n\r\n/* ═══════════════════════ TYPES + DATA (agents analytics dashboard) ═══════════════════════ */\r\ntype ReportData = Record<string, any>;\r\n\r\n/** Per-agent time breakdown used by the four heat panels. */\r\ninterface AgentWiseTime {\r\n  agentName: string;\r\n  idleTime: string;\r\n  talkTime: string;\r\n  wrapTime: string;\r\n  handleTime: string;\r\n}\r\n\r\n/** Response of POST /agent-dashboard/agent-data — KPI strip + heat panels. */\r\ninterface AgentDashboardData {\r\n  agentsLoggedIn: number;\r\n  callsHandled: number;\r\n  loggedInDuration: string;\r\n  breakTime: string;\r\n  firstLoginTime: string;\r\n  outboundTime: string;\r\n  agentsTime: {\r\n    totalIdleTime: string;\r\n    totalTalkTime: string;\r\n    totalWrapTime: string;\r\n    totalHandleTime: string;\r\n    agentWiseIdleTime: AgentWiseTime[];\r\n  };\r\n}\r\n\r\n/** Inbound/outbound call leg inside an agent-performance row. */\r\ninterface AgentPerfCallLeg {\r\n  totalCalls: number;\r\n  answeredCalls: number;\r\n  answeredPercentage: number | null;\r\n  abandonedCalls: number;\r\n  abandonedPercentage: number | null;\r\n}\r\n\r\n/** One row of POST /agent-dashboard/agent-performance (the Agent Wise Performance table). */\r\ninterface AgentPerformanceRow {\r\n  agentId: string;\r\n  agentName: string;\r\n  totalCallsHandled: number;\r\n  answeredCalls: number;\r\n  abandonedCalls: number;\r\n  loggedInDuration: string;\r\n  callHandleTime: string;\r\n  breakCount: number;\r\n  breakTime: string;\r\n  meetingTime: string;\r\n  trainingTime: string;\r\n  idleTime: string;\r\n  totalCalls: number;\r\n  inbound: AgentPerfCallLeg;\r\n  outbound: AgentPerfCallLeg;\r\n  holdTime: string;\r\n  firstLoginTime: string | null;\r\n  logoutTime: string | null;\r\n  avgCallHandleTime: string;\r\n  productionPct?: number;\r\n  occupancyPct?: number;\r\n  breakPct?: number;\r\n  idlePct?: number;\r\n  meetingTrainingPct?: number;\r\n  callHandlePct?: number;\r\n  answerRatePct?: number;\r\n  reportDate?: string;\r\n  loginTime?: string;\r\n}\r\n\r\ninterface AgentDashboardParams extends SortParams {\r\n  inputType?: string;\r\n  search?: string;   // agent name / ID / process / queue (table + export only)\r\n  startDate: string; // YYYY-MM-DD\r\n  endDate: string;   // YYYY-MM-DD\r\n}\r\n\r\ninterface AgentPerformancePage {\r\n  data: AgentPerformanceRow[];\r\n  total: number;\r\n  page: number;\r\n  pageSize: number;\r\n  totalPages: number;\r\n}\r\n\r\nconst EMPTY_AGENT_DASHBOARD: AgentDashboardData = {\r\n  agentsLoggedIn: 0, callsHandled: 0, loggedInDuration: \"00:00:00\",\r\n  breakTime: \"00:00:00\", firstLoginTime: \"00:00:00\", outboundTime: \"00:00:00\",\r\n  agentsTime: { totalIdleTime: \"00:00:00\", totalTalkTime: \"00:00:00\", totalWrapTime: \"00:00:00\", totalHandleTime: \"00:00:00\", agentWiseIdleTime: [] },\r\n};\r\n\r\n// Table column id → sortBy understood by /agent-dashboard/agent-performance.\r\nconst SORT_FIELD: Record<string, string> = {\r\n  agent: \"agentName\",\r\n  firstLogin: \"firstLoginTime\",\r\n  lastLogout: \"logoutTime\",\r\n  total: \"totalCalls\",\r\n  answered: \"answeredCalls\",\r\n  abandoned: \"abandonedCalls\",\r\n  avgCallHandleTime: \"avgCallHandleTime\",\r\n  loggedInDuration: \"loggedInDuration\",\r\n  production: \"productionSeconds\",\r\n  callHandle: \"callHandleTime\",\r\n  break: \"breakTime\",\r\n  idle: \"idleTime\",\r\n  meetingTraining: \"meetingTrainingSeconds\",\r\n};\r\nfunction toSortParams(sorting: MRT_SortingState): SortParams {\r\n  const s = sorting[0];\r\n  const sortBy = s && SORT_FIELD[s.id];\r\n  return sortBy ? { sortBy, sortOrder: s.desc ? \"desc\" : \"asc\" } : {};\r\n}\r\n\r\n/** POST /agent-dashboard/agent-data → KPI strip + per-agent idle/talk/wrap/handle (heat panels). */\r\nasync function getAgentDashboardData(params: AgentDashboardParams): Promise<AgentDashboardData> {\r\n  const res = await axiosInstance.post(END_POINT.AGENT_DASHBOARD_DATA, {\r\n    inputType: params.inputType ?? \"TOTAL\",\r\n    startDate: params.startDate,\r\n    endDate: params.endDate,\r\n  });\r\n  const body = res.data;\r\n  const row = Array.isArray(body) ? body[0] : body;\r\n  return row ? { ...EMPTY_AGENT_DASHBOARD, ...row } : EMPTY_AGENT_DASHBOARD;\r\n}\r\n\r\n/** POST /agent-dashboard/agent-performance (page 1-based + pageSize) → server-side paginated envelope. */\r\nasync function getAgentPerformancePaged(\r\n  params: AgentDashboardParams & { page: number; pageSize: number },\r\n): Promise<AgentPerformancePage> {\r\n  const res = await axiosInstance.post(END_POINT.AGENT_DASHBOARD_PERFORMANCE, {\r\n    inputType: params.inputType ?? \"TOTAL\",\r\n    startDate: params.startDate,\r\n    endDate: params.endDate,\r\n    page: params.page,\r\n    pageSize: params.pageSize,\r\n    ...(params.search ? { search: params.search } : {}),\r\n    ...(params.sortBy ? { sortBy: params.sortBy, sortOrder: params.sortOrder ?? \"asc\" } : {}),\r\n  });\r\n  const b = res.data ?? {};\r\n  const data: AgentPerformanceRow[] = Array.isArray(b) ? b : (b.data ?? []);\r\n  return {\r\n    data,\r\n    total: typeof b.total === \"number\" ? b.total : data.length,\r\n    page: typeof b.page === \"number\" ? b.page : params.page,\r\n    pageSize: typeof b.pageSize === \"number\" ? b.pageSize : params.pageSize,\r\n    totalPages: typeof b.totalPages === \"number\" ? b.totalPages : 1,\r\n  };\r\n}\r\n\r\n/**\r\n * POST /agent-dashboard/export/excel → downloads the Agents dashboard as an .xlsx file\r\n * (summary cards block + agent-wise performance table; ranked heatmap is not exported).\r\n * Omit reportMode → Summary (one aggregated row per agent for the range); pass\r\n * reportMode \"cumulative\" → one row per agent per day across the range.\r\n */\r\nasync function exportAgentDashboardToExcel(params: AgentDashboardParams & { reportMode?: string }): Promise<void> {\r\n  const body: Record<string, unknown> = {\r\n    inputType: params.inputType ?? \"TOTAL\",\r\n    startDate: params.startDate,\r\n    endDate: params.endDate,\r\n  };\r\n  if (params.reportMode) body.reportMode = params.reportMode;\r\n  if (params.search) body.search = params.search;\r\n  if (params.sortBy) {\r\n    body.sortBy = params.sortBy;\r\n    body.sortOrder = params.sortOrder ?? \"asc\";\r\n  }\r\n  const res = await axiosInstance.post(END_POINT.AGENT_DASHBOARD_EXPORT_EXCEL, body, { responseType: \"blob\" });\r\n  const url = URL.createObjectURL(new Blob([res.data]));\r\n  const a = document.createElement(\"a\");\r\n  const suffix = params.reportMode ?? \"summary\";\r\n  a.href = url;\r\n  a.download = `agents-report-${suffix}-${params.startDate}_${params.endDate}.xlsx`;\r\n  a.click();\r\n  URL.revokeObjectURL(url);\r\n}\r\n\r\n/* ═══════════════════════ COLORS (brand primary = teal #1A5F6C) ═══════════════════════ */\r\nconst C = {\r\n  navy: \"#14505b\", blue: \"#1A5F6C\", green: \"#0a9a62\", amber: \"#c47c00\",\r\n  red: \"#cc2a2a\", purple: \"#6b3fbf\", teal: \"#0b7a8f\",\r\n  bg: \"transparent\", 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\",\r\n  blt: \"#e3f1f3\", rlt: \"#fdeae3\",\r\n};\r\n// One font stack for the whole tab — matches the agent-detail report so the\r\n// KPI strip, heat panels, table and dialogs all read as one page.\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\n// Per-KPI accent colours (border + value) for the stat cards.\r\nconst KPI_ACCENTS = [\"#1A5F6C\", \"#00897B\", \"#5E35B1\", \"#F57C00\", \"#00ACC1\", \"#E53935\"];\r\n// Numeric styling — same page font, just bold + tabular figures for alignment.\r\nconst mono = { fontWeight: 700, fontVariantNumeric: \"tabular-nums\" as const };\r\n// Deterministic avatar palette — a name always maps to the same colour.\r\nconst AVATAR_COLORS = [\"#1A5F6C\", \"#00897B\", \"#5E35B1\", \"#F57C00\", \"#00ACC1\", \"#E53935\", \"#0a9a62\", \"#6b3fbf\"];\r\n// Initials = first letter of first name + first letter of last name.\r\nfunction getInitials(name: string): string {\r\n  const parts = (name || \"\").trim().split(/\\s+/).filter(Boolean);\r\n  if (parts.length === 0) return \"\";\r\n  if (parts.length === 1) return parts[0][0].toUpperCase();\r\n  return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\r\n}\r\nfunction getAvatarColor(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 AVATAR_COLORS[Math.abs(h) % AVATAR_COLORS.length];\r\n}\r\n\r\n/* ═══════════════════════ HELPERS ═══════════════════════ */\r\nfunction parseDur(d?: string | null): number {\r\n  if (!d || d === \"00:00:00\") return 0;\r\n  const p = d.split(\":\").map(Number);\r\n  if (p.length === 3) return p[0] * 3600 + p[1] * 60 + p[2];\r\n  if (p.length === 2) return p[0] * 60 + p[1];\r\n  return 0;\r\n}\r\nfunction fmtDur(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\nfunction fmtDateTime(v?: string | null): string {\r\n  if (!v) return \"\";\r\n  const d = dayjs(String(v).replace(\" \", \"T\"));\r\n  return d.isValid() ? d.format(\"DD-MM-YYYY HH:mm:ss\") : String(v);\r\n}\r\n// Null-ish API values (\"null\"/\"undefined\"/blank) → \"\" so cells never render the text \"null\".\r\nfunction cleanVal(v?: string | number | null): string {\r\n  if (v == null) return \"\";\r\n  const s = String(v).trim();\r\n  return s.toLowerCase() === \"null\" || s.toLowerCase() === \"undefined\" ? \"\" : s;\r\n}\r\n// Two-line date/time: { date: \"Jul 23, 2026\", time: \"6:58 PM\" }. Empty parts when blank/invalid.\r\nfunction fmtDateParts(v?: string | null): { date: string; time: string } {\r\n  if (!cleanVal(v)) return { date: \"\", time: \"\" };\r\n  const d = dayjs(String(v).replace(\" \", \"T\"));\r\n  if (!d.isValid()) return { date: \"\", time: \"\" };\r\n  return { date: d.format(\"MMM D, YYYY\"), time: d.format(\"h:mm A\") };\r\n}\r\n// Stacked date-over-time cell for the First Login / Last Logout columns.\r\nfunction DateTimeCell({ value }: { value?: string | null }) {\r\n  const { date, time } = fmtDateParts(value);\r\n  if (!date) return null;\r\n  return (\r\n    <span style={{ display: \"flex\", flexDirection: \"column\", lineHeight: 1.35, fontVariantNumeric: \"tabular-nums\" }}>\r\n      <span style={{ fontSize: 13, color: C.t1, fontWeight: 700 }}>{date}</span>\r\n      <span style={{ fontSize: 11.5, color: C.t2, fontWeight: 500 }}>{time}</span>\r\n    </span>\r\n  );\r\n}\r\n// Epoch (ms) for chronological sorting of date/time columns; 0 when empty/invalid.\r\nfunction toEpoch(v?: string | null): number {\r\n  if (!v) return 0;\r\n  const d = dayjs(String(v).replace(\" \", \"T\"));\r\n  return d.isValid() ? d.valueOf() : 0;\r\n}\r\n/**\r\n * Threshold colour for a performance percentage (0–100).\r\n *   Normal (high is good — Production, Idle, Call Handle):\r\n *     < 25% → red · 25–50% → orange · 50–75% → blue · ≥ 75% → green\r\n *   Inverted (high is bad — Break, Meeting + Training) flips the scale:\r\n *     < 25% → green · 25–50% → blue · 50–75% → orange · ≥ 75% → red\r\n */\r\nfunction pctColor(pct: number, invert = false): string {\r\n  const colors = invert\r\n    ? [\"#0a9a62\", \"#1565c8\", \"#F57C00\", \"#cc2a2a\"]  // green → red (low is good)\r\n    : [\"#cc2a2a\", \"#F57C00\", \"#1565c8\", \"#0a9a62\"]; // red → green (high is good)\r\n  if (pct < 25) return colors[0];\r\n  if (pct < 50) return colors[1];\r\n  if (pct < 75) return colors[2];\r\n  return colors[3];\r\n}\r\n/* ═══════════════════════ KPI CELL ═══════════════════════ */\r\nfunction Kpi({ label, value, sub, accent }: { label: string; value: string | number; sub?: string; accent: string }) {\r\n  return (\r\n    <Box sx={{\r\n      background: C.surface, border: `1px solid #dce3ef`, borderRadius: \"10px\",\r\n      borderLeft: `4px solid ${accent}`, p: \"14px 16px\",\r\n      boxShadow: \"0 1px 4px rgba(0,0,0,.08), 0 2px 12px rgba(0,0,0,.05)\",\r\n      display: \"flex\", flexDirection: \"column\", gap: 0.5,\r\n    }}>\r\n      <Typography sx={{ fontSize: 11.5, fontWeight: 600, color: C.t2, textTransform: \"uppercase\", letterSpacing: 0.4 }}>{label}</Typography>\r\n      <Typography sx={{ fontSize: 28, fontWeight: 800, color: accent, lineHeight: 1, letterSpacing: \"-0.5px\", fontVariantNumeric: \"tabular-nums\" }}>{value}</Typography>\r\n      {sub && <Typography sx={{ fontSize: 11.5, color: C.t3 }}>{sub}</Typography>}\r\n    </Box>\r\n  );\r\n}\r\n\r\n/* ═══════════════════════ HEAT PANEL (Top/Bottom) ═══════════════════════ */\r\nconst HEAT_TONES = {\r\n  blue: { headBg: \"#eef5f6\", headTx: \"#14505b\", pillBg: \"#e3f1f3\", pillTx: \"#14505b\", rank: \"#6ba3ac\" },\r\n  red:  { headBg: \"#fdeeee\", headTx: \"#b3352f\", pillBg: \"#fbe3e3\", pillTx: \"#c0392b\", rank: \"#e0a0a0\" },\r\n};\r\n// Narrowest a Top/Bottom list may get before the pair stacks vertically.\r\nconst HEAT_COL_MIN = 170;\r\n// Tooltips are portaled to <body>; hide them once their row scrolls out of the list's clip area.\r\nconst CLIPPED_TOOLTIP_POPPER = {\r\n  modifiers: [{ name: \"hide\", enabled: true }],\r\n  sx: { \"&[data-popper-reference-hidden]\": { visibility: \"hidden\", pointerEvents: \"none\" } },\r\n};\r\nfunction HeatColumn({ title, rows, variant }: { title: string; rows: { name: string; secs: number }[]; variant: \"blue\" | \"red\" }) {\r\n  const tone = HEAT_TONES[variant];\r\n  return (\r\n    // Basis of HEAT_COL_MIN: below that the two columns wrap and stack instead of\r\n    // squeezing the agent name down to one character per line.\r\n    <Box sx={{ flex: `1 1 ${HEAT_COL_MIN}px`, minWidth: 0, background: C.surface }}>\r\n      <Typography sx={{ fontSize: 10.5, fontWeight: 700, letterSpacing: 0.4, textTransform: \"uppercase\", color: tone.headTx, background: tone.headBg, textAlign: \"center\", py: 0.7, borderBottom: `1px solid ${C.b1}` }}>{title}</Typography>\r\n      <Box sx={{ maxHeight: 176, overflowY: \"auto\", \"&::-webkit-scrollbar\": { width: 5 }, \"&::-webkit-scrollbar-thumb\": { background: C.b2, borderRadius: 4 } }}>\r\n        {rows.map((r, i) => (\r\n          <Box key={i} sx={{\r\n            display: \"grid\", gridTemplateColumns: \"16px minmax(0, 1fr) auto\", alignItems: \"center\", gap: 0.6,\r\n            px: 1, py: 0.45, borderBottom: `1px solid ${C.b1}`, \"&:last-child\": { borderBottom: \"none\" },\r\n            transition: \"background .12s\", \"&:hover\": { background: C.s2 },\r\n          }}>\r\n            <Typography sx={{ ...mono, fontSize: 10, fontWeight: 700, color: tone.rank, textAlign: \"right\" }}>{i + 1}</Typography>\r\n            <Tooltip title={r.name} placement=\"top\" enterDelay={400} slotProps={{ popper: CLIPPED_TOOLTIP_POPPER }}>\r\n              <Typography noWrap sx={{ fontSize: 11.5, fontWeight: 600, color: C.t1, lineHeight: 1.25 }}>\r\n                {r.name}\r\n              </Typography>\r\n            </Tooltip>\r\n            <Box sx={{ background: tone.pillBg, color: tone.pillTx, borderRadius: \"5px\", textAlign: \"center\", px: 0.7, py: 0.3, minWidth: 56, ...mono, fontSize: 10.5, whiteSpace: \"nowrap\" }}>\r\n              {fmtDur(r.secs)}\r\n            </Box>\r\n          </Box>\r\n        ))}\r\n        {rows.length === 0 && <Typography sx={{ fontSize: 11.5, color: C.t3, textAlign: \"center\", py: 3 }}>No data</Typography>}\r\n      </Box>\r\n    </Box>\r\n  );\r\n}\r\nfunction HeatPanel({ title, total, accent, agents, pick }: {\r\n  title: string; total: string; accent: string; agents: AgentWiseTime[]; pick: (a: AgentWiseTime) => string;\r\n}) {\r\n  const vals = agents.map((a) => ({ name: a.agentName, secs: parseDur(pick(a)) }));\r\n  const asc = [...vals].sort((a, b) => a.secs - b.secs);\r\n  const desc = [...asc].reverse();\r\n  return (\r\n    <Paper elevation={0} sx={{ border: `1px solid #dce3ef`, borderLeft: `4px solid ${accent}`, borderRadius: \"10px\", overflow: \"hidden\", boxShadow: \"0 1px 4px rgba(0,0,0,.08), 0 2px 12px rgba(0,0,0,.05)\" }}>\r\n      <Box sx={{ background: C.s2, borderBottom: `1px solid ${C.b1}`, px: 1.5, py: 1, display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", gap: 1 }}>\r\n        <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.8, minWidth: 0 }}>\r\n          <Box sx={{ width: 8, height: 8, borderRadius: \"50%\", background: accent, flexShrink: 0 }} />\r\n          <Tooltip title={title} placement=\"top\" enterDelay={400}>\r\n            <Typography noWrap sx={{ fontSize: 12, fontWeight: 700, color: C.t1, letterSpacing: 0.3, textTransform: \"uppercase\" }}>{title}</Typography>\r\n          </Tooltip>\r\n        </Box>\r\n        <Typography sx={{ ...mono, fontSize: 14, fontWeight: 800, color: accent, flexShrink: 0, whiteSpace: \"nowrap\" }}>{total}</Typography>\r\n      </Box>\r\n      {/* The 1px gap over a tinted background is the divider — so it reads correctly\r\n          both side-by-side and stacked, unlike a fixed border on one child. */}\r\n      <Box sx={{ display: \"flex\", flexWrap: \"wrap\", gap: \"1px\", background: C.b1 }}>\r\n        <HeatColumn title=\"Top to Bottom\" rows={desc} variant=\"blue\" />\r\n        <HeatColumn title=\"Bottom to Top\" rows={asc} variant=\"red\" />\r\n      </Box>\r\n    </Paper>\r\n  );\r\n}\r\n\r\n/* ═══════════════════════ TABLE BAR CELL ═══════════════════════\r\n   Stacked layout: a top line with [count?] · % · time, and the coloured bar\r\n   sitting directly beneath them. The bar uses the column's own accent, fills\r\n   0–100%, and renders nothing at zero — so empty rows read as blank, not red. */\r\nfunction BarCell({ value, pct, accent, count, onCountClick }: {\r\n  value: string; pct: number; accent: string; count?: number; onCountClick?: () => void;\r\n}) {\r\n  const width = Math.max(0, Math.min(100, pct));\r\n  return (\r\n    <Box sx={{ display: \"flex\", flexDirection: \"column\", gap: 0.5, minWidth: 130, py: 0.3 }}>\r\n      <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 0.8 }}>\r\n        {count != null && (\r\n          <Box\r\n            component=\"span\"\r\n            onClick={onCountClick ? (e) => { e.stopPropagation(); onCountClick(); } : undefined}\r\n            title={onCountClick ? \"View break sessions\" : undefined}\r\n            sx={{\r\n              flexShrink: 0, display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\",\r\n              minWidth: 20, height: 18, px: 0.5, borderRadius: \"9px\", fontSize: 10,\r\n              fontVariantNumeric: \"tabular-nums\", transition: \"background .12s\",\r\n              ...(onCountClick\r\n                ? { cursor: \"pointer\", background: C.navy, color: \"#fff\", \"&:hover\": { background: C.blue } }\r\n                : { background: C.s3, color: C.t3 }),\r\n            }}\r\n          >\r\n            {count}\r\n          </Box>\r\n        )}\r\n        {/* A percentage over 100% is flagged with a red tint — it signals a value\r\n            that exceeds its reference period and is worth a second look. */}\r\n        <Typography sx={{\r\n          fontSize: 13, fontWeight: 800, fontVariantNumeric: \"tabular-nums\", whiteSpace: \"nowrap\",\r\n          ...(pct > 100\r\n            ? { color: C.red, background: C.rlt, borderRadius: \"4px\", px: 0.5 }\r\n            : { color: C.t2 }),\r\n        }}>{pct.toFixed(1)}%</Typography>\r\n        <Typography sx={{ fontSize: 11.5, color: C.t1, fontWeight: 800, fontVariantNumeric: \"tabular-nums\", whiteSpace: \"nowrap\" }}>{cleanVal(value)}</Typography>\r\n      </Box>\r\n      <Box sx={{ width: \"100%\", height: 8, background: C.s3, borderRadius: \"4px\", overflow: \"hidden\" }}>\r\n        {width > 0 && <Box sx={{ height: \"100%\", width: `${width}%`, background: accent, borderRadius: \"4px\" }} />}\r\n      </Box>\r\n    </Box>\r\n  );\r\n}\r\nconst InOut = ({ i, o }: { i: number; o: number }) => (\r\n  <Typography sx={{ fontSize: 13, color: C.t1, fontWeight: 600, whiteSpace: \"nowrap\" }}>\r\n    <span style={{ color: C.t1, fontWeight: 400 }}>In:</span> {i} <span style={{ color: C.t1, fontWeight: 400 }}>Out:</span> {o}\r\n  </Typography>\r\n);\r\n\r\n/* ═══════════════════════ MAIN COMPONENT ═══════════════════════ */\r\nfunction AgentPerformanceReportContent() {\r\n  const [startDate, setStartDate] = useState<Dayjs | null>(dayjs().startOf(\"day\"));\r\n  const [endDate, setEndDate] = useState<Dayjs | null>(dayjs());\r\n  const [quickRange, setQuickRange] = useState<string>(\"today\");\r\n\r\n  const [dashboard, setDashboard] = useState<AgentDashboardData | null>(null);\r\n  const [rows, setRows] = useState<AgentPerformanceRow[]>([]);\r\n  const [total, setTotal] = useState(0);\r\n  const [pagination, setPagination] = useState({ pageIndex: 0, pageSize: 10 });\r\n  // Server-side sort — starts on Agent A→Z (arrow shown), like the Login Report.\r\n  const [sorting, setSorting] = useState<MRT_SortingState>([{ id: \"agent\", desc: false }]);\r\n  // Agent Wise table search — debounced, sent to the server.\r\n  const [searchText, setSearchText] = useState(\"\");\r\n  const [debouncedSearch, setDebouncedSearch] = useState(\"\");\r\n  useEffect(() => {\r\n    const t = setTimeout(() => {\r\n      setDebouncedSearch(searchText.trim());\r\n      // New result set → start again from the first page.\r\n      setPagination((p) => (p.pageIndex === 0 ? p : { ...p, pageIndex: 0 }));\r\n    }, 400);\r\n    return () => clearTimeout(t);\r\n  }, [searchText]);\r\n  const [loadingTop, setLoadingTop] = useState(false);\r\n  const [loadingTable, setLoadingTable] = useState(false);\r\n  // Latest table request id — responses from superseded requests are ignored.\r\n  const tableReqId = useRef(0);\r\n  const [error, setError] = useState(\"\");\r\n  // Eye action → drill into the per-agent detail view (rendered in place).\r\n  const [selectedAgent, setSelectedAgent] = useState<AgentPerformanceRow | null>(null);\r\n  // Break-count click → break-sessions dialog for that agent.\r\n  const [breaksAgent, setBreaksAgent] = useState<AgentPerformanceRow | null>(null);\r\n  // Export mode: \"summary\" (no reportMode) or \"cumulative\" (day-wise, reportMode: \"cumulative\").\r\n  const [exportMode, setExportMode] = useState<\"summary\" | \"cumulative\">(\"summary\");\r\n  const [exporting, setExporting] = useState(false);\r\n  const loading = loadingTop || loadingTable;\r\n  // Table is busy while fetching or while a typed search is still debouncing.\r\n  const tableBusy = loadingTable || searchText.trim() !== debouncedSearch;\r\n  const toast = useToast();\r\n\r\n  const onErr = (err: any) => {\r\n    const msg =\r\n      err?.response?.data?.message ||\r\n      err?.response?.data?.detail ||\r\n      err?.message ||\r\n      \"Failed to load agents report\";\r\n    setError(msg);\r\n    toast.showToast(msg, \"error\");\r\n  };\r\n\r\n  // KPI strip + heat panels — always the full agent set (dates only).\r\n  const fetchDashboard = useCallback((showSpinner = true) => {\r\n    if (!startDate || !endDate) return;\r\n    const params = { inputType: \"TOTAL\", startDate: startDate.format(\"YYYY-MM-DDTHH:mm:ss\"), endDate: endDate.format(\"YYYY-MM-DDTHH:mm:ss\") };\r\n    if (showSpinner) setLoadingTop(true);\r\n    setError(\"\");\r\n    getAgentDashboardData(params).then(setDashboard).catch(onErr).finally(() => setLoadingTop(false));\r\n  }, [startDate, endDate]);\r\n\r\n  // Agent Wise Performance table — server-side paginated.\r\n  const fetchTable = useCallback((showSpinner = true) => {\r\n    if (!startDate || !endDate) return;\r\n    const params = {\r\n      inputType: \"TOTAL\", startDate: startDate.format(\"YYYY-MM-DDTHH:mm:ss\"), endDate: endDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n      page: pagination.pageIndex + 1, pageSize: pagination.pageSize,\r\n      search: debouncedSearch || undefined,\r\n      ...toSortParams(sorting),\r\n    };\r\n    const reqId = ++tableReqId.current;\r\n    if (showSpinner) setLoadingTable(true);\r\n    setError(\"\");\r\n    getAgentPerformancePaged(params)\r\n      .then((res) => { if (reqId === tableReqId.current) { setRows(res.data); setTotal(res.total); } })\r\n      .catch((err) => { if (reqId === tableReqId.current) onErr(err); })\r\n      .finally(() => { if (reqId === tableReqId.current) setLoadingTable(false); });\r\n  }, [startDate, endDate, pagination.pageIndex, pagination.pageSize, sorting, debouncedSearch]);\r\n\r\n  useEffect(() => { fetchDashboard(); }, [fetchDashboard]);\r\n  useEffect(() => { fetchTable(); }, [fetchTable]);\r\n\r\n  const handleRefresh = () => {\r\n    if (quickRange === \"today\" || quickRange === \"week\" || quickRange === \"month\") {\r\n      const nowD = dayjs();\r\n      let sd = nowD.startOf(\"day\");\r\n      if (quickRange === \"week\") sd = nowD.startOf(\"week\").startOf(\"day\");\r\n      else if (quickRange === \"month\") sd = nowD.startOf(\"month\").startOf(\"day\");\r\n      setStartDate(sd); setEndDate(nowD);\r\n    }\r\n    fetchDashboard(); fetchTable();\r\n  };\r\n\r\n  const handleExport = () => {\r\n    if (!startDate || !endDate) return;\r\n    setExporting(true);\r\n    setError(\"\");\r\n    exportAgentDashboardToExcel({\r\n      inputType: \"TOTAL\",\r\n      startDate: startDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n      endDate: endDate.format(\"YYYY-MM-DDTHH:mm:ss\"),\r\n      reportMode: exportMode, // \"summary\" | \"cumulative\" — sent explicitly so the two differ\r\n      search: debouncedSearch || undefined,\r\n      ...toSortParams(sorting),\r\n    }).catch(onErr).finally(() => setExporting(false));\r\n  };\r\n\r\n  const heatAgents = dashboard?.agentsTime.agentWiseIdleTime ?? [];\r\n\r\n  // Production Time = logged-in − break; the numeric value shown alongside the % bar.\r\n  const prodSecs = (r: AgentPerformanceRow) => Math.max(0, parseDur(r.loggedInDuration) - parseDur(r.breakTime));\r\n  const mtSecs = (r: AgentPerformanceRow) => parseDur(r.meetingTime) + parseDur(r.trainingTime);\r\n\r\n  const columns = useMemo<MRT_ColumnDef<AgentPerformanceRow>[]>(() => [\r\n    { id: \"agent\", header: \"Agent\", size: 220, accessorFn: (r) => r.agentName,\r\n      Cell: ({ row }) => {\r\n        const name = cleanVal(row.original.agentName);\r\n        return (\r\n          <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, minWidth: 0 }}>\r\n            <Box sx={{\r\n              width: 30, height: 30, borderRadius: \"50%\", flexShrink: 0,\r\n              display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n              background: getAvatarColor(name), color: \"#fff\", fontSize: 11, letterSpacing: 0.3,\r\n            }}>\r\n              {getInitials(name)}\r\n            </Box>\r\n            <Box sx={{ minWidth: 0 }}>\r\n              <Typography sx={{ fontSize: 13, color: C.t1, fontWeight: 600, lineHeight: 1.3 }}>{name}</Typography>\r\n              <Typography noWrap sx={{ fontSize: 11.5, color: C.t3, fontWeight: 500, fontVariantNumeric: \"tabular-nums\", lineHeight: 1.3 }}>{cleanVal(row.original.agentId)}</Typography>\r\n            </Box>\r\n          </Box>\r\n        );\r\n      } },\r\n    { id: \"firstLogin\", header: \"First Login\", size: 160, accessorFn: (r) => toEpoch(r.firstLoginTime),\r\n      Cell: ({ row }) => <DateTimeCell value={row.original.firstLoginTime} /> },\r\n    { id: \"lastLogout\", header: \"Last Logout\", size: 160, accessorFn: (r) => toEpoch(r.logoutTime),\r\n      Cell: ({ row }) => <DateTimeCell value={row.original.logoutTime} /> },\r\n    { id: \"total\", header: \"Total Calls\", size: 120, accessorFn: (r) => r.inbound.totalCalls + r.outbound.totalCalls,\r\n      Cell: ({ row }) => <InOut i={row.original.inbound.totalCalls} o={row.original.outbound.totalCalls} /> },\r\n    { id: \"answered\", header: \"Answered\", size: 120, accessorFn: (r) => r.inbound.answeredCalls + r.outbound.answeredCalls,\r\n      Cell: ({ row }) => <InOut i={row.original.inbound.answeredCalls} o={row.original.outbound.answeredCalls} /> },\r\n    { id: \"abandoned\", header: \"Abandoned\", size: 120, accessorFn: (r) => r.inbound.abandonedCalls + r.outbound.abandonedCalls,\r\n      Cell: ({ row }) => <InOut i={row.original.inbound.abandonedCalls} o={row.original.outbound.abandonedCalls} /> },\r\n    { id: \"avgCallHandleTime\", header: \"AHT\", size: 100, accessorFn: (r) => parseDur(r.avgCallHandleTime),\r\n      Cell: ({ row }) => <span style={{ fontWeight: 600, fontSize: 13, color: C.purple, fontVariantNumeric: \"tabular-nums\" }}>{cleanVal(row.original.avgCallHandleTime)}</span> },\r\n    { id: \"loggedInDuration\", header: \"Logged In Duration\", size: 130, accessorFn: (r) => parseDur(r.loggedInDuration),\r\n      Cell: ({ row }) => <span style={{ fontWeight: 600, fontSize: 13, color: C.teal, fontVariantNumeric: \"tabular-nums\" }}>{cleanVal(row.original.loggedInDuration)}</span> },\r\n    { id: \"production\", header: \"Production Time\", size: 200, accessorFn: (r) => prodSecs(r),\r\n      Cell: ({ row }) => { const p = row.original.productionPct ?? 0; return <BarCell value={fmtDur(prodSecs(row.original))} pct={p} accent={pctColor(p)} />; } },\r\n    { id: \"callHandle\", header: \"Call Handle Time\", size: 200, accessorFn: (r) => parseDur(r.callHandleTime),\r\n      Cell: ({ row }) => { const p = row.original.callHandlePct ?? 0; return <BarCell value={row.original.callHandleTime} pct={p} accent={pctColor(p)} />; } },\r\n    { id: \"break\", header: \"Break Time\", size: 200, accessorFn: (r) => parseDur(r.breakTime),\r\n      Cell: ({ row }) => { const p = row.original.breakPct ?? 0; return <BarCell value={row.original.breakTime} pct={p} accent={pctColor(p, true)} count={row.original.breakCount} onCountClick={row.original.breakCount > 0 ? () => setBreaksAgent(row.original) : undefined} />; } },\r\n    { id: \"idle\", header: \"Idle Time\", size: 200, accessorFn: (r) => parseDur(r.idleTime),\r\n      Cell: ({ row }) => { const p = row.original.idlePct ?? 0; return <BarCell value={row.original.idleTime} pct={p} accent={pctColor(p)} />; } },\r\n    { id: \"meetingTraining\", header: \"Meeting + Training\", size: 200, accessorFn: (r) => mtSecs(r),\r\n      Cell: ({ row }) => { const p = row.original.meetingTrainingPct ?? 0; return <BarCell value={fmtDur(mtSecs(row.original))} pct={p} accent={pctColor(p, true)} />; } },\r\n    { id: \"actions\", header: \"Detail\", size: 80, enableColumnFilter: false, enableSorting: false,\r\n      Cell: ({ row }) => (\r\n        <Tooltip title=\"View agent details\" arrow>\r\n          <IconButton size=\"small\" onClick={() => setSelectedAgent(row.original)} sx={{ color: C.blue }}>\r\n            <VisibilityIcon sx={{ fontSize: 16 }} />\r\n          </IconButton>\r\n        </Tooltip>\r\n      ) },\r\n  ], []);\r\n\r\n  // Drill-down: reuse the existing per-agent detail page. It only needs the\r\n  // agentId + name; every other metric it fetches itself by agent id.\r\n  if (selectedAgent) {\r\n    const agentRow: ReportData = { agentDetails: { agentId: selectedAgent.agentId, fullName: selectedAgent.agentName } };\r\n    return (\r\n      <AgentDetailReport\r\n        agentRow={agentRow}\r\n        onBack={() => setSelectedAgent(null)}\r\n        initialStartDate={startDate}\r\n        initialEndDate={endDate}\r\n        initialQuickRange={quickRange}\r\n      />\r\n    );\r\n  }\r\n\r\n  return (\r\n    <LocalizationProvider dateAdapter={AdapterDayjs}>\r\n      <Box sx={{\r\n        background: C.bg, minHeight: \"100vh\", fontFamily: FONT,\r\n        \"& .MuiTypography-root, & th, & td, & .MuiButton-root, & .MuiChip-root, & .MuiMenuItem-root\": { fontFamily: FONT },\r\n      }}>\r\n        <PageHeader title=\"Agents  Performance Report\" />\r\n\r\n        <ReportFilterBar\r\n          startDate={startDate} endDate={endDate}\r\n          onStartChange={setStartDate}\r\n          onEndChange={setEndDate}\r\n          showTime={true}\r\n          quickRange={quickRange} onQuickRangeChange={(r: QuickRange) => setQuickRange(r)}\r\n          extra={\r\n            <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n              <AppButton startIcon={<RefreshIcon sx={{ fontSize: \"0.9rem !important\" }} />} disabled={loading} onClick={handleRefresh} sx={{ height: 32 }}>\r\n                Refresh\r\n              </AppButton>\r\n              <SDKPermissionGuard permissions={[SDK_PERMISSIONS.REPORTS_AGENT_PERFORMANCE_EXPORT, SDK_PERMISSIONS.REPORTS_AGENT_PERFORMANCE_MANAGE]}>\r\n                <FormControl size=\"small\">\r\n                  <Select\r\n                    value={exportMode}\r\n                    onChange={(e) => setExportMode(e.target.value as \"summary\" | \"cumulative\")}\r\n                    sx={{ height: 32, fontSize: 13, minWidth: 130, bgcolor: \"#fff\", borderRadius: \"30px\", \"& .MuiOutlinedInput-notchedOutline\": { borderRadius: \"30px\" } }}\r\n                  >\r\n                    <MenuItem value=\"summary\" sx={{ fontSize: 13 }}>Summary</MenuItem>\r\n                    <MenuItem value=\"cumulative\" sx={{ fontSize: 13 }}>Day-wise</MenuItem>\r\n                  </Select>\r\n                </FormControl>\r\n                <AppButton\r\n                  startIcon={exporting ? <CircularProgress size={14} sx={{ color: \"#fff\" }} /> : <FileDownloadIcon sx={{ fontSize: \"0.95rem !important\" }} />}\r\n                  disabled={exporting || loading}\r\n                  onClick={handleExport}\r\n                  sx={{ height: 32 }}\r\n                >\r\n                  Export Excel\r\n                </AppButton>\r\n              </SDKPermissionGuard>\r\n            </Box>\r\n          }\r\n        />\r\n\r\n        {error && <Alert severity=\"error\" sx={{ mx: 2.5, mt: 1.5 }} onClose={() => setError(\"\")}>{error}</Alert>}\r\n\r\n        <Box sx={{ py: 1.5, px: 2, position: \"relative\" }}>\r\n          {loadingTop && (\r\n            <Box sx={{ position: \"absolute\", inset: 0, background: \"rgba(240,244,248,0.7)\", display: \"flex\", alignItems: \"flex-start\", justifyContent: \"center\", pt: 10, zIndex: 10 }}>\r\n              <CircularProgress />\r\n            </Box>\r\n          )}\r\n\r\n          {/* ═══ KPI STRIP ═══ */}\r\n          <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"repeat(2,1fr)\", md: \"repeat(3,1fr)\", lg: \"repeat(6,1fr)\" }, gap: 1.25, mb: 1.75 }}>\r\n            <Kpi label=\"Agents Logged In\" value={dashboard?.agentsLoggedIn ?? 0} sub=\"Active right now\" accent={KPI_ACCENTS[0]} />\r\n            <Kpi label=\"Calls Handled\" value={(dashboard?.callsHandled ?? 0).toLocaleString()} sub=\"Today total\" accent={KPI_ACCENTS[1]} />\r\n            <Kpi label=\"Logged In Duration\" value={dashboard?.loggedInDuration ?? \"00:00:00\"} sub=\"Cumulative\" accent={KPI_ACCENTS[2]} />\r\n            <Kpi label=\"Break Time\" value={dashboard?.breakTime ?? \"00:00:00\"} sub=\"Cumulative\" accent={KPI_ACCENTS[3]} />\r\n            <Kpi label=\"First Login Time\" value={dashboard?.firstLoginTime ?? \"00:00:00\"} sub=\"Earliest today\" accent={KPI_ACCENTS[4]} />\r\n            <Kpi label=\"Outbound Time\" value={dashboard?.outboundTime ?? \"00:00:00\"} sub=\"Active outbound\" accent={KPI_ACCENTS[5]} />\r\n          </Box>\r\n\r\n          {/* ═══ 4 HEAT PANELS — one row on wide screens, 2×2 then stacked as it narrows ═══ */}\r\n          <Box sx={{ display: \"grid\", gridTemplateColumns: { xs: \"minmax(0, 1fr)\", sm: \"repeat(2, minmax(0, 1fr))\", lg: \"repeat(4, minmax(0, 1fr))\" }, gap: 1.5, mb: 1.5 }}>\r\n            <HeatPanel title=\"IDLE Time\" accent=\"#F57C00\" total={dashboard?.agentsTime.totalIdleTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.idleTime} />\r\n            <HeatPanel title=\"Talk Time\" accent=\"#00897B\" total={dashboard?.agentsTime.totalTalkTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.talkTime} />\r\n            <HeatPanel title=\"Wrap Time\" accent=\"#5E35B1\" total={dashboard?.agentsTime.totalWrapTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.wrapTime} />\r\n            <HeatPanel title=\"Call Handle Time\" accent=\"#1A5F6C\" total={dashboard?.agentsTime.totalHandleTime ?? \"00:00:00\"} agents={heatAgents} pick={(a) => a.handleTime} />\r\n          </Box>\r\n\r\n          {/* ═══ AGENT WISE PERFORMANCE TABLE ═══ */}\r\n          <Box>\r\n            <Box sx={{ display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\", flexWrap: \"wrap\", gap: 1, mb: 1 }}>\r\n              <Typography sx={{ fontSize: 13, fontWeight: 800, color: C.t1 }}>Agent Wise Performance</Typography>\r\n              <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\r\n                <SearchBar\r\n                  value={searchText}\r\n                  onChange={setSearchText}\r\n                  placeholder=\"Search agent, ID, process, queue...\"\r\n                  width={{ xs: 200, sm: 280 }}\r\n                />\r\n                <Tooltip title={loadingTable ? \"Loading…\" : \"Reload table\"} arrow>\r\n                  <span>\r\n                    <IconButton\r\n                      size=\"small\"\r\n                      onClick={() => fetchTable()}\r\n                      disabled={loadingTable}\r\n                      sx={{ color: C.blue, border: `1px solid ${C.b2}`, width: 32, height: 32 }}\r\n                    >\r\n                      {loadingTable\r\n                        ? <CircularProgress size={16} sx={{ color: C.blue }} />\r\n                        : <RefreshIcon sx={{ fontSize: 18 }} />}\r\n                    </IconButton>\r\n                  </span>\r\n                </Tooltip>\r\n              </Box>\r\n            </Box>\r\n            <Box sx={{ position: \"relative\" }}>\r\n              <AppTable\r\n                columns={columns}\r\n                data={rows}\r\n                layoutMode=\"semantic\"\r\n                enableTopToolbar={false}\r\n                enableColumnActions={false}\r\n                enableColumnFilters={false}\r\n                enableColumnDragging={false}\r\n                enableHiding={false}\r\n                enableDensityToggle={false}\r\n                enableFullScreenToggle={false}\r\n                enableSorting\r\n                enableSortingRemoval={false}\r\n                enableMultiSort={false}\r\n                // First click on a new column sorts ascending (MRT otherwise starts\r\n                // number columns descending); clicking the active column flips it.\r\n                sortDescFirst={false}\r\n                // Tooltips always say what the next click does (\"Sort by X …\"), also on\r\n                // the active column — removal is off, so asc → desc and desc → asc.\r\n                localization={{\r\n                  sortedByColumnAsc: \"Sort by {column} descending\",\r\n                  sortedByColumnDesc: \"Sort by {column} ascending\",\r\n                }}\r\n                manualSorting\r\n                onSortingChange={(updater) => {\r\n                  // Show the loader on the click itself, not after the fetch effect runs.\r\n                  const next = typeof updater === \"function\" ? updater(sorting) : updater;\r\n                  if (JSON.stringify(next) !== JSON.stringify(sorting)) setLoadingTable(true);\r\n                  setSorting(updater);\r\n                  // New order → start again from the first page.\r\n                  setPagination((p) => ({ ...p, pageIndex: 0 }));\r\n                }}\r\n                manualPagination\r\n                rowCount={total}\r\n                onPaginationChange={(updater) => {\r\n                  const next = typeof updater === \"function\" ? updater(pagination) : updater;\r\n                  if (next.pageIndex !== pagination.pageIndex || next.pageSize !== pagination.pageSize) setLoadingTable(true);\r\n                  setPagination(updater);\r\n                }}\r\n                state={{ pagination, sorting, isLoading: loadingTable && rows.length === 0, showProgressBars: tableBusy }}\r\n                muiTableHeadCellProps={{\r\n                  sx: {\r\n                    ...headCellSx, fontFamily: FONT, textAlign: \"left\", verticalAlign: \"middle\",\r\n                    // Semantic (native <table>) layout: the browser computes one set of\r\n                    // column widths for header + body together, so columns always align\r\n                    // regardless of the host's MUI version. `&&` keeps our padding winning\r\n                    // over MUI's default cell padding under MUI v6 hosts (no CSS @layer).\r\n                    \"&&\": { px: \"12px\", py: \"8px\", boxSizing: \"border-box\" },\r\n                    \"& .Mui-TableHeadCell-Content\": { justifyContent: \"flex-start\" },\r\n                  },\r\n                }}\r\n                muiTableBodyCellProps={{\r\n                  sx: {\r\n                    ...bodyCellSx, fontFamily: FONT, textAlign: \"left\", verticalAlign: \"middle\",\r\n                    \"&&\": { px: \"12px\", py: \"8px\", boxSizing: \"border-box\" },\r\n                  },\r\n                }}\r\n                muiTableBodyRowProps={({ row }) => ({\r\n                  onClick: () => setSelectedAgent(row.original),\r\n                  sx: { cursor: \"pointer\", \"&:hover\": { backgroundColor: C.s2 } },\r\n                })}\r\n              />\r\n              {/* Visible loading overlay for sort / search / page changes (initial load uses the table's own skeleton). */}\r\n              {tableBusy && rows.length > 0 && (\r\n                <Box sx={{\r\n                  position: \"absolute\", inset: 0, zIndex: 5,\r\n                  background: \"rgba(255,255,255,0.65)\", backdropFilter: \"blur(1px)\",\r\n                  display: \"flex\", alignItems: \"flex-start\", justifyContent: \"center\", pt: 8,\r\n                  borderRadius: 1,\r\n                }}>\r\n                  <Box sx={{\r\n                    display: \"flex\", alignItems: \"center\", gap: 1.25, px: 2, py: 1.25,\r\n                    background: \"#fff\", borderRadius: 2, boxShadow: \"0 4px 16px rgba(0,0,0,0.12)\",\r\n                  }}>\r\n                    <CircularProgress size={20} thickness={5} sx={{ color: C.blue }} />\r\n                    <Typography sx={{ fontSize: 13, fontWeight: 600, color: C.t1 }}>Loading…</Typography>\r\n                  </Box>\r\n                </Box>\r\n              )}\r\n            </Box>\r\n          </Box>\r\n        </Box>\r\n      </Box>\r\n\r\n      <BreakSessionsDialog\r\n        open={!!breaksAgent}\r\n        onClose={() => setBreaksAgent(null)}\r\n        agentId={breaksAgent?.agentId ?? \"\"}\r\n        agentName={breaksAgent?.agentName ?? \"\"}\r\n        startDate={startDate}\r\n        endDate={endDate}\r\n      />\r\n    </LocalizationProvider>\r\n  );\r\n}\r\n\r\nconst AgentPerformanceReport: React.FC = () => (\r\n  <SDKProvider>\r\n    <AgentPerformanceReportContent />\r\n  </SDKProvider>\r\n);\r\n\r\nexport default AgentPerformanceReport;\r\n","import { useEffect, useState } from \"react\";\r\nimport {\r\n  Box, Typography, IconButton, CircularProgress, Dialog, DialogTitle, DialogContent,\r\n} from \"@mui/material\";\r\nimport FileDownloadIcon from \"@mui/icons-material/FileDownload\";\r\nimport CloseIcon from \"@mui/icons-material/Close\";\r\nimport dayjs, { type Dayjs } from \"dayjs\";\r\nimport AppButton from \"../common/components/AppButton\";\r\nimport BreakSessionsTable, { BreakTypeCounts, type BreakSort } from \"../common/components/BreakSessionsTable\";\r\nimport { getAgentBreakSessionsWithCounts, exportAgentBreakSessionsToExcel } from \"../agentDetailReport/useAgentDetailReport\";\r\nimport type { BreakSessionResponse, BreakTypeCount } from \"../agentDetailReport/types\";\r\n\r\nconst FONT = \"'Inter', 'Segoe UI', 'Roboto', -apple-system, BlinkMacSystemFont, sans-serif\";\r\nconst C = { red: \"#cc2a2a\" };\r\n\r\n// Format start/end date range the way the breaks endpoint expects (ISO).\r\nfunction fmtRange(startDate: Dayjs | null, endDate: Dayjs | null) {\r\n  const sd = startDate ?? dayjs();\r\n  const ed = endDate ?? dayjs();\r\n  return {\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\r\ninterface Props {\r\n  open: boolean;\r\n  onClose: () => void;\r\n  agentId: string;\r\n  agentName: string;\r\n  startDate: Dayjs | null;\r\n  endDate: Dayjs | null;\r\n}\r\n\r\n/**\r\n * Break-sessions drill-down dialog — lists an agent's individual breaks grouped\r\n * by date, with an Excel export. Fetches on open via the break-sessions endpoint.\r\n */\r\nexport default function BreakSessionsDialog({ open, onClose, agentId, agentName, startDate, endDate }: Props) {\r\n  const [breakSessions, setBreakSessions] = useState<BreakSessionResponse[]>([]);\r\n  const [loading, setLoading] = useState(false);\r\n  const [exporting, setExporting] = useState(false);\r\n  const [error, setError] = useState(\"\");\r\n  const [breakTypeCounts, setBreakTypeCounts] = useState<BreakTypeCount[]>([]);\r\n  const [sort, setSort] = useState<BreakSort>({ sortBy: \"breakStart\", sortOrder: \"asc\" });\r\n\r\n  useEffect(() => {\r\n    if (!open || !agentId) return;\r\n    let active = true;\r\n    setBreakSessions([]);\r\n    setBreakTypeCounts([]);\r\n    setError(\"\");\r\n    setLoading(true);\r\n    getAgentBreakSessionsWithCounts(agentId, { ...fmtRange(startDate, endDate), ...sort })\r\n      .then((res) => { if (active) { setBreakSessions(res.breaks); setBreakTypeCounts(res.breakTypeCounts); } })\r\n      .catch(() => { if (active) { setBreakSessions([]); setBreakTypeCounts([]); } })\r\n      .finally(() => { if (active) setLoading(false); });\r\n    return () => { active = false; };\r\n  }, [open, agentId, startDate, endDate, sort]);\r\n\r\n  const handleExport = async () => {\r\n    if (!agentId) return;\r\n    try {\r\n      setExporting(true);\r\n      await exportAgentBreakSessionsToExcel(agentId, { ...fmtRange(startDate, endDate), ...sort });\r\n    } catch (err: any) {\r\n      setError(err?.message || \"Failed to export breaks Excel\");\r\n    } finally {\r\n      setExporting(false);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <Dialog\r\n      open={open}\r\n      onClose={(_e, reason) => { if (reason !== \"backdropClick\") onClose(); }}\r\n      maxWidth=\"md\"\r\n      fullWidth\r\n      slotProps={{ paper: { sx: { borderRadius: \"12px\", fontFamily: FONT, overflow: \"hidden\", boxShadow: \"0 8px 32px rgba(0,0,0,0.18)\", maxWidth: 640 } } }}\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={exporting ? <CircularProgress size={14} sx={{ color: \"#fff\" }} /> : <FileDownloadIcon sx={{ fontSize: \"0.85rem !important\" }} />}\r\n            disabled={exporting || loading || breakSessions.length === 0}\r\n            onClick={handleExport}\r\n            sx={{ whiteSpace: \"nowrap\" }}\r\n          >\r\n            Export to Excel\r\n          </AppButton>\r\n          <IconButton\r\n            onClick={onClose}\r\n            size=\"small\"\r\n            sx={{ color: \"#fff\", backgroundColor: \"rgba(255,255,255,0.1)\", \"&:hover\": { backgroundColor: \"rgba(255,255,255,0.2)\" } }}\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        {error && (\r\n          <Typography sx={{ fontFamily: FONT, color: C.red, fontSize: \"0.78rem\", px: 2, pt: 1.5 }}>{error}</Typography>\r\n        )}\r\n        {loading ? (\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={sort} onSortChange={setSort} />\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}\r\n"],"mappings":"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","names":["useState","useEffect","Box","Typography","CircularProgress","IconButton","FileDownloadIcon","dayjs","jsx","jsxs","C","FONT","dayjs","jsxs","jsx","C","Box","Typography","useState","useEffect","_a","_b","_c","_d","IconButton","FONT","CircularProgress","FileDownloadIcon"]}