export type MailboxCredentialPolicyInput = {
  directPasswordMatchesAccount: boolean;
  externalAccessEnabled: boolean;
  externalPasswordMatchesAccount: boolean;
  hasExternalPassword: boolean;
  legacyCompatibilityEnabled: boolean;
  planAvailable: boolean;
};

export function resolveMailboxCredentialPolicy(input: MailboxCredentialPolicyInput) {
  const disableBrokenExternal = input.externalAccessEnabled &&
    (!input.hasExternalPassword || input.externalPasswordMatchesAccount);

  return {
    disableBrokenExternal,
    externalAvailable: input.planAvailable && input.externalAccessEnabled &&
      input.hasExternalPassword && !input.externalPasswordMatchesAccount,
    revokeExternalForPlan: !input.planAvailable && input.hasExternalPassword,
    rotateDirectPassword: input.directPasswordMatchesAccount &&
      !input.legacyCompatibilityEnabled && !disableBrokenExternal,
  };
}
