import { WorkspaceRoles } from '../../core/constants.js';
import { WorkspaceLimits } from './limits.js';
import { PaidWorkspacePlans, UnpaidWorkspacePlans, WorkspacePlanBillingIntervals, WorkspacePlans } from './plans.js';
import type { MaybeNullOrUndefined } from '../../core/helpers/utilityTypes.js';
import { FeatureFlags } from '../../environment/index.js';
/**
 * WORKSPACE FEATURES
 */
export declare const WorkspacePlanFeatures: {
    readonly AutomateBeta: "automateBeta";
    readonly DomainDiscoverability: "domainDiscoverability";
    readonly DomainSecurity: "domainBasedSecurityPolicies";
    readonly SSO: "oidcSso";
    readonly CustomDataRegion: "workspaceDataRegionSpecificity";
    readonly HideSpeckleBranding: "hideSpeckleBranding";
    readonly ExclusiveMembership: "exclusiveMembership";
    readonly EmbedPrivateProjects: "embedPrivateProjects";
    readonly AccIntegration: "accIntegration";
    readonly SavedViews: "savedViews";
};
export type WorkspacePlanFeatures = (typeof WorkspacePlanFeatures)[keyof typeof WorkspacePlanFeatures];
export declare const WorkspacePlanFeaturesMetadata: {
    readonly automateBeta: {
        readonly displayName: "Automate beta access";
        readonly description: "Run custom automations on every new model version";
    };
    readonly domainDiscoverability: {
        readonly displayName: "Domain discoverability";
        readonly description: "Allow people to discover your workspace if they use a verified company email";
    };
    readonly domainBasedSecurityPolicies: {
        readonly displayName: "Domain protection";
        readonly description: "Require workspace members to use a verified company email";
    };
    readonly oidcSso: {
        readonly displayName: "Single Sign-On (SSO)";
        readonly description: "Require workspace members to authenticate with your SSO provider";
    };
    readonly workspaceDataRegionSpecificity: {
        readonly displayName: "Custom data residency";
        readonly description: "Store your data in EU, UK, North America, or Asia Pacific";
    };
    readonly hideSpeckleBranding: {
        readonly displayName: "Customised viewer";
        readonly description: "Hide the Speckle branding in embedded viewer";
    };
    readonly exclusiveMembership: {
        readonly displayName: "Exclusive workspace membership";
        readonly description: "Members of exclusive workspaces cannot join or create other workspaces";
    };
    readonly embedPrivateProjects: {
        readonly displayName: "Embed private projects";
        readonly description: "Embed projects with visibility set to private or workspace";
    };
    readonly accIntegration: {
        readonly displayName: "ACC connector";
        readonly description: "Configure automatic import of ACC assets into workspace projects";
    };
    readonly savedViews: {
        readonly displayName: "Saved views";
        readonly description: "Create and share saved views of your models";
    };
};
/**
 * PLAN CONFIG - PRICES & FEATURES
 */
export type WorkspacePlanPriceStructure = {
    [interval in WorkspacePlanBillingIntervals]: {
        [role in WorkspaceRoles]: number;
    };
};
export type WorkspacePlanConfig<Plan extends WorkspacePlans = WorkspacePlans> = {
    plan: Plan;
    features: readonly WorkspacePlanFeatures[];
    limits: WorkspaceLimits;
};
export declare const WorkspacePaidPlanConfigs: (params: {
    featureFlags: Partial<FeatureFlags> | undefined;
}) => {
    [plan in PaidWorkspacePlans]: WorkspacePlanConfig<plan>;
};
export declare const WorkspaceUnpaidPlanConfigs: (params: {
    featureFlags: Partial<FeatureFlags> | undefined;
}) => {
    [plan in UnpaidWorkspacePlans]: WorkspacePlanConfig<plan>;
};
export declare const WorkspacePlanConfigs: (params: {
    featureFlags: Partial<FeatureFlags> | undefined;
}) => {
    teamUnlimitedInvoiced: WorkspacePlanConfig<"teamUnlimitedInvoiced">;
    proUnlimitedInvoiced: WorkspacePlanConfig<"proUnlimitedInvoiced">;
    enterprise: WorkspacePlanConfig<"enterprise">;
    unlimited: WorkspacePlanConfig<"unlimited">;
    academia: WorkspacePlanConfig<"academia">;
    free: WorkspacePlanConfig<"free">;
    team: WorkspacePlanConfig<"team">;
    teamUnlimited: WorkspacePlanConfig<"teamUnlimited">;
    pro: WorkspacePlanConfig<"pro">;
    proUnlimited: WorkspacePlanConfig<"proUnlimited">;
};
/**
 * Checks if a workspace exceeds its plan limits for projects and models
 */
export declare const workspaceExceedsPlanLimit: (params: {
    plan: MaybeNullOrUndefined<WorkspacePlans>;
    projectCount: MaybeNullOrUndefined<number>;
    modelCount: MaybeNullOrUndefined<number>;
    featureFlags: Partial<FeatureFlags> | undefined;
}) => boolean;
/**
 * Checks if a workspace reached its plan limits for projects and models
 */
export declare const workspaceReachedPlanLimit: (params: {
    plan: MaybeNullOrUndefined<WorkspacePlans>;
    projectCount: MaybeNullOrUndefined<number>;
    modelCount: MaybeNullOrUndefined<number>;
    featureFlags: Partial<FeatureFlags> | undefined;
}) => boolean;
export declare const workspacePlanHasAccessToFeature: ({ plan, feature, featureFlags }: {
    plan: WorkspacePlans;
    feature: WorkspacePlanFeatures;
    featureFlags: Partial<FeatureFlags> | undefined;
}) => boolean;
//# sourceMappingURL=features.d.ts.map