import {
  createResolvedApproverActionAuthAdapter,
  resolveApprovalApprovers,
} from "openclaw/plugin-sdk/approval-auth-runtime";
import { normalizeLowercaseStringOrEmpty } from "openclaw/plugin-sdk/text-runtime";
import { resolveMattermostAccount } from "./mattermost/accounts.js";

const MATTERMOST_USER_ID_RE = /^[a-z0-9]{26}$/;

function normalizeMattermostApproverId(value: string | number): string | undefined {
  const normalized = String(value)
    .trim()
    .replace(/^(mattermost|user):/i, "")
    .replace(/^@/, "")
    .trim();
  const lowered = normalizeLowercaseStringOrEmpty(normalized);
  return MATTERMOST_USER_ID_RE.test(lowered) ? lowered : undefined;
}

export const mattermostApprovalAuth = createResolvedApproverActionAuthAdapter({
  channelLabel: "Mattermost",
  resolveApprovers: ({ cfg, accountId }) => {
    const account = resolveMattermostAccount({ cfg, accountId }).config;
    return resolveApprovalApprovers({
      allowFrom: account.allowFrom,
      normalizeApprover: normalizeMattermostApproverId,
    });
  },
  normalizeSenderId: (value) => normalizeMattermostApproverId(value),
});
