import { useMemo } from "react";

export default function useTaskStatusView({
  taskStatus,
  taskAccountRoles,
  accountById,
  formatAccountLabel,
  setActiveTab,
  checkInviteAccess,
  parseHistory,
  assignedAccountCount,
  roleSummary,
  accountEvents,
  formatCountdownWithNow,
  inviteAccessStatus
}) {
  const monitorAccountIds = taskStatus && taskStatus.monitorInfo && taskStatus.monitorInfo.accountIds
    ? taskStatus.monitorInfo.accountIds
    : (taskStatus && taskStatus.monitorInfo && taskStatus.monitorInfo.accountId ? [taskStatus.monitorInfo.accountId] : []);
  const monitorLabels = monitorAccountIds
    .map((id) => {
      const account = accountById.get(id);
      return account ? formatAccountLabel(account) : String(id);
    })
    .filter(Boolean);
  const inviteAccountIds = Object.entries(taskAccountRoles || {})
    .filter(([, roles]) => roles && roles.invite && Number(roles.inviteLimit || 0) > 0)
    .map(([id]) => Number(id));
  const inviteLabels = inviteAccountIds
    .map((id) => {
      const account = accountById.get(id);
      return account ? formatAccountLabel(account) : String(id);
    })
    .filter(Boolean);
  const nowLine = [
    `Мониторинг: ${taskStatus.monitorInfo && taskStatus.monitorInfo.monitoring ? "вкл." : "выкл."}`,
    `Очередь: ${taskStatus.queueCount}`,
    `Инвайт: ${taskStatus.running ? "активен" : "остановлен"}`,
    `Следующий цикл: ${taskStatus.running ? formatCountdownWithNow(taskStatus.nextRunAt) : "—"}`
  ].join(" • ");
  const primaryIssue = taskStatus.readiness && !taskStatus.readiness.ok && taskStatus.readiness.reasons && taskStatus.readiness.reasons.length
    ? taskStatus.readiness.reasons[0]
    : "";
  const openFixTab = () => {
    if (!primaryIssue) return;
    const text = primaryIssue.toLowerCase();
    if (text.includes("аккаунт") || text.includes("роль") || text.includes("инвайт") || text.includes("монитор")) {
      setActiveTab("accounts");
      return;
    }
    if (text.includes("групп")) {
      setActiveTab("task");
      return;
    }
    if (text.includes("прав")) {
      setActiveTab("accounts");
      return;
    }
    setActiveTab("task");
  };
  const inviteAccessChecked = inviteAccessStatus && inviteAccessStatus.length > 0;
  const inviteAccessOk = inviteAccessChecked && inviteAccessStatus.every((item) => item.canInvite);
  const inviteAccessWarn = inviteAccessChecked && !inviteAccessOk;
  const lastEvents = (accountEvents || []).slice(0, 3);
  const checklistItems = [
    {
      id: "accounts",
      label: "Подключены аккаунты",
      ok: assignedAccountCount > 0,
      hint: assignedAccountCount > 0 ? `Назначено: ${assignedAccountCount}` : "Нет назначенных аккаунтов",
      action: () => setActiveTab("accounts"),
      actionLabel: "Открыть аккаунты"
    },
    {
      id: "roles",
      label: "Назначены роли",
      ok: roleSummary.monitor.length > 0 && inviteAccountIds.length > 0,
      hint: `Мониторинг: ${roleSummary.monitor.length}, Инвайт: ${inviteAccountIds.length}, Подтверждение: ${roleSummary.confirm.length}`,
      action: () => setActiveTab("accounts"),
      actionLabel: "Назначить роли"
    },
    {
      id: "access",
      label: "Права в цели проверены",
      ok: inviteAccessOk,
      warn: inviteAccessWarn,
      hint: inviteAccessChecked
        ? (inviteAccessOk ? "Права инвайта подтверждены" : "Есть аккаунты без прав")
        : "Проверка прав не запускалась",
      action: () => checkInviteAccess("checklist"),
      actionLabel: "Проверить права"
    },
    {
      id: "queue",
      label: "Очередь готова",
      ok: Number(taskStatus.queueCount || 0) > 0,
      hint: `В очереди: ${taskStatus.queueCount || 0}`,
      action: () => parseHistory("checklist"),
      actionLabel: "Собрать историю"
    }
  ];
  const checklistStats = useMemo(() => {
    let ok = 0;
    let warn = 0;
    let fail = 0;
    checklistItems.forEach((item) => {
      if (item.ok) ok += 1;
      else if (item.warn) warn += 1;
      else fail += 1;
    });
    return { ok, warn, fail, total: checklistItems.length };
  }, [checklistItems]);

  return {
    monitorLabels,
    inviteLabels,
    nowLine,
    primaryIssue,
    openFixTab,
    checklistItems,
    checklistStats,
    inviteAccessChecked,
    inviteAccessOk,
    inviteAccessWarn,
    lastEvents
  };
}
