type LeadStageLike = {
  leadStageName?: string;
  leadStage?: {
    stageName?: string;
    name?: string;
  } | null;
};

const getNormalizedLeadStageName = (lead?: LeadStageLike | null): string => {
  const stageName =
    lead?.leadStageName ?? lead?.leadStage?.stageName ?? lead?.leadStage?.name;

  return typeof stageName === "string" ? stageName.trim().toLowerCase() : "";
};

const isClosedLeadStage = (lead?: LeadStageLike | null): boolean => {
  const stageName = getNormalizedLeadStageName(lead);
  return /\bwon\b/.test(stageName);
};

export const isClosedLeadEditBlocked = (
  lead: LeadStageLike | null | undefined,
  canEditClosedLeadByRule: boolean,
): boolean => isClosedLeadStage(lead) && !canEditClosedLeadByRule;
