export interface TableQueryParams {
    $select?: string;
    $filter?: string;
    $orderby?: string;
    $groupby?: string;
    $having?: string;
    $top?: number;
    $skip?: number;
    $distinct?: boolean;
    $userId?: number;
    $globalFilterId?: number;
    $allowCreate?: boolean;
}
export interface TableRecord {
    [key: string]: unknown;
}
/**
 * Interface for File Description
 * Represents the description of a file attached to a record.
 */
export interface FileDescription {
    /**
     * Gets the database identifier of the file (populated for existing file).
     */
    FileId: number;
    /**
     * Gets or sets the logical (originally uploaded) file name.
     */
    FileName: string;
    /**
     * Gets the logical file extension.
     */
    readonly FileExtension?: string;
    /**
     * Gets or sets the file summary or description.
     */
    Description?: string;
    /**
     * Gets or sets the file physical size on disk.
     */
    FileSize: number;
    /**
     * Gets or sets the image height in pixels for an image file.
     */
    ImageHeight?: number;
    /**
     * Gets or sets the image width in pixels for an image file.
     */
    ImageWidth?: number;
    /**
     * Gets flag indicating that file storing an image.
     */
    readonly IsImage: boolean;
    /**
     * Gets or sets the flag indicating that file contains the default image assigned to a record.
     */
    IsDefaultImage: boolean;
    /**
     * Gets or sets the table name this file is assigned to.
     */
    TableName: string;
    /**
     * Gets or sets the identifier of the record this file is assigned to.
     */
    RecordId: number;
    /**
     * Gets the unique file identifier that is used for image retrieval
     * (populated for existing file).
     */
    UniqueFileId: string;
    /**
     * Gets the date and time when file has been created or updated
     * (populated for existing file).
     */
    LastUpdated: string;
    /**
     * Gets or sets the method of including this file into a communication message.
     */
    InclusionType: 'Attachment' | 'Link';
}
/**
 * Interface for Communication Information
 */
export interface CommunicationInfo {
    AuthorUserId: number;
    Body: string;
    FromContactId: number;
    ReplyToContactId: number;
    CommunicationType: 'Email' | 'Text' | 'Letter';
    Contacts: number[];
    IsBulkEmail: boolean;
    SendToContactParents: boolean;
    Subject: string;
    StartDate: string;
    TextPhoneNumberId?: number;
}
/**
 * Interface for Message Address
 */
export interface MessageAddress {
    DisplayName: string;
    Address: string;
}
/**
 * Interface for Message Information
 */
export interface MessageInfo {
    FromAddress: MessageAddress;
    ToAddresses: MessageAddress[];
    ReplyToAddress?: MessageAddress;
    Subject: string;
    Body: string;
    StartDate?: string;
}
/**
 * Interface for Communication response
 */
export interface Communication {
    Communication_ID: number;
    Author_User_ID: number;
    Subject: string;
    Body: string;
    Domain_ID: number;
    Start_Date: string;
    Communication_Status_ID: number;
    From_Contact: number;
    Reply_to_Contact: number;
    Template_ID?: number;
    Active: boolean;
}
/**
 * Interface for Domain Information
 * Provides the basic information about domain.
 */
export interface DomainInfo {
    /**
     * Gets or sets the domain or organization display name.
     */
    DisplayName: string;
    /**
     * Gets or sets the file identifier containing the default image associated with the domain.
     */
    ImageFileId?: number;
    /**
     * Gets the default time zone identifier for all users in this domain.
     */
    TimeZoneName: string;
    /**
     * Gets the default culture for all users in this domain.
     */
    CultureName: string;
    /**
     * Gets or sets the password complexity validation Regex expression.
     */
    PasswordComplexityExpression?: string;
    /**
     * Gets or sets the password complexity validation error message.
     */
    PasswordComplexityMessage?: string;
    /**
     * Gets or sets the flag indicating that users may also use email and mobile
     * phone number in place of the user name for authentication.
     */
    IsSimpleSignOnEnabled: boolean;
    /**
     * Gets or sets the flag indicating that users may choose their preferred time zone
     * on the user profile screen and that time zone will be globally used for presenting
     * date and time data.
     */
    IsUserTimeZoneEnabled: boolean;
    /**
     * Gets or sets the flag indicating that users may use SMS for multi-factor authentication.
     */
    IsSmsMfaEnabled: boolean;
    /**
     * Gets or sets the name of the owner company.
     */
    CompanyName?: string;
    /**
     * Gets or sets the email of the owner company.
     */
    CompanyEmail?: string;
    /**
     * Gets or sets the phone number of the owner company.
     */
    CompanyPhone?: string;
    /**
     * Gets or sets the table associated with the Global_Filter_Page_ID
     */
    GlobalFilterTableName?: string;
    /**
     * Gets or sets the site number assigned to Accounting Integration for this domain.
     */
    SiteNumber?: string;
}
/**
 * Interface for Global Filter Items
 */
export interface GlobalFilterItem {
    /**
     * The identifier for the global filter
     */
    Key: number;
    /**
     * The friendly name (description) for the global filter
     */
    Value: string;
}
/**
 * Interface for Global Filter query parameters
 */
export interface GlobalFilterParams {
    $ignorePermissions?: boolean;
    $userId?: number;
}
/**
 * Parameter direction enum for stored procedure parameters
 */
export type ParameterDirection = "Input" | "Output" | "InputOutput" | "ReturnValue";
/**
 * Data type enum for stored procedure parameters
 */
export type ParameterDataType = "Unknown" | "String" | "Text" | "Xml" | "Byte" | "Integer16" | "Integer32" | "Integer64" | "Decimal" | "Real" | "Boolean" | "Date" | "Time" | "DateTime" | "Timestamp" | "Binary" | "Password" | "Money" | "Guid" | "Phone" | "Email" | "Variant" | "Separator" | "Image" | "Counter" | "TableName" | "GlobalFilter" | "TimeZone" | "Locale" | "LargeString" | "Url" | "Strings" | "Integers" | "Color" | "SecretKey";
/**
 * Interface for stored procedure parameter information
 * Provides information about a stored procedure parameter.
 */
export interface ParameterInfo {
    /**
     * Gets or sets the parameter name.
     */
    Name: string;
    /**
     * Gets or sets the parameter direction (in, out, etc).
     */
    Direction: ParameterDirection;
    /**
     * Gets or set the parameter data type.
     */
    DataType: ParameterDataType;
    /**
     * Gets or sets the parameter maximum length.
     */
    Size: number;
}
/**
 * Interface for stored procedure information
 * Provides basic metadata about a stored procedure.
 */
export interface ProcedureInfo {
    /**
     * Gets or sets the routine name.
     */
    Name: string;
    /**
     * Gets collection of routine parameters.
     */
    Parameters: ParameterInfo[];
}
/**
 * Interface for Table Information
 * Provides basic metadata about a table.
 */
export interface TableInfo {
    /**
     * Gets or sets the table name.
     */
    Name: string;
    /**
     * Gets or sets the table display name.
     */
    DisplayName: string;
    /**
     * Gets or sets the table description.
     */
    Description?: string;
    /**
     * Gets or sets whether the table is active.
     */
    Active: boolean;
    /**
     * Gets or sets the table identifier.
     */
    Table_ID: number;
}
export interface FileUploadParams {
    description?: string;
    isDefaultImage?: boolean;
    longestDimension?: number;
    userId?: number;
}
export interface FileUpdateParams {
    fileName?: string;
    description?: string;
    isDefaultImage?: boolean;
    longestDimension?: number;
    userId?: number;
}
export interface QueryParams {
    [key: string]: string | number | boolean | string[] | number[] | boolean[] | undefined | null;
}
export interface RequestBody {
    [key: string]: unknown;
}
export interface TableMetadata {
    Table_ID: number;
    Table_Name: string;
    Display_Name: string;
    Description?: string;
    [key: string]: unknown;
}
