import { FieldType, NumberDataType } from "./data-types";
export interface MaskedFieldRestriction {
    masked?: {
        currentUserIsAuthorizedToReveal: boolean;
        revealUrl?: string;
    };
}
export interface RequirableRestriction extends MaskedFieldRestriction {
    required: boolean;
}
export interface FieldRestrictions extends RequirableRestriction {
    readOnly: boolean;
    systemReserved: boolean;
    dataType: FieldType;
}
export interface StringRestrictions extends FieldRestrictions {
    dataType: "STRING";
    maxLength?: number;
}
export interface NumericRestrictions extends FieldRestrictions {
    fieldDataType: "NUMERIC";
    scale?: number;
    precision?: number;
}
export interface NumberRestrictions extends FieldRestrictions {
    fieldDataType: NumberDataType;
    precision?: number;
}
export interface ReferenceDataRestrictions extends FieldRestrictions {
    constrainingListName: string;
    cascadingReferenceDataName?: string;
    cascadingReferenceDataFilterByCode?: string;
    cascadingReferenceDataFilterByField?: string;
    cascadingReferenceDataFilterByParentCode?: string;
}
export type UserGroupStrategy = "USERS" | "GROUPS" | "USERS_AND_GROUPS";
export interface UserGroupRestrictions extends FieldRestrictions {
    allowMultipleSelections: boolean;
    userSelectionStrategy: UserGroupStrategy;
}
export interface FileRestrictions extends RequirableRestriction {
    allowMultipleFiles: boolean;
}
export type FieldTypeToRestrictions<Type extends FieldType> = Type extends "STRING" ? StringRestrictions : Type extends "NUMERIC" ? NumericRestrictions : Type extends "REFERENCEDATA" ? ReferenceDataRestrictions : Type extends "USER_GROUP" ? UserGroupRestrictions : FieldRestrictions;
