import type { ModalStaticFunctions } from "antd/es/modal/confirm";
import { isPlatformAdmin } from "./agentPerms";
import type { Session } from "./api";

type ModalLike = Pick<ModalStaticFunctions, "confirm">;

/** 超管是否已进入某公司代管视图 */
export function isPlatformActingOnTenant(session: Session | null | undefined): boolean {
  return !!session && isPlatformAdmin(session.role) && (session.tenantId || 0) > 0;
}

/**
 * 超管对公司内部写操作：两次确认。
 * 普通公司管理员直接通过。
 */
export async function confirmCompanyWrite(
  modal: ModalLike,
  session: Session,
  action: string,
  detail?: string
): Promise<boolean> {
  if (!isPlatformAdmin(session.role)) return true;

  const first = await new Promise<boolean>((resolve) => {
    modal.confirm({
      title: "超管写操作确认（1/2）",
      content: (
        <div>
          <p>
            你正在以<strong>平台超级管理员</strong>身份修改某公司内部数据（不是该公司管理员账号）。
          </p>
          <p>
            操作：<strong>{action}</strong>
          </p>
          {detail ? <p style={{ color: "#666" }}>{detail}</p> : null}
          <p>日常应由该公司管理员处理。是否继续？</p>
        </div>
      ),
      okText: "继续",
      cancelText: "取消",
      onOk: () => resolve(true),
      onCancel: () => resolve(false),
    });
  });
  if (!first) return false;

  return new Promise<boolean>((resolve) => {
    modal.confirm({
      title: "超管写操作确认（2/2）",
      content: (
        <div>
          <p>请再次确认：将执行「{action}」。</p>
          <p style={{ color: "#b42318" }}>此操作会影响该公司业务配置或成员权限，请确认无误。</p>
        </div>
      ),
      okText: "确认执行",
      okButtonProps: { danger: true },
      cancelText: "取消",
      onOk: () => resolve(true),
      onCancel: () => resolve(false),
    });
  });
}

/**
 * 进入公司前单次确认。
 */
export async function confirmEnterCompany(
  modal: ModalLike,
  companyName: string,
  tenantId: number
): Promise<boolean> {
  return new Promise((resolve) => {
    modal.confirm({
      title: "打开公司管理视图",
      content: (
        <div>
          <p>
            以<strong>平台超级管理员</strong>身份打开「<strong>{companyName}</strong>」(#{tenantId})。
          </p>
          <p>这是你的平台管理能力，不是登录成该公司账号。写操作仍会再次确认。</p>
        </div>
      ),
      okText: "打开",
      cancelText: "取消",
      onOk: () => resolve(true),
      onCancel: () => resolve(false),
    });
  });
}
