/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2021-2021. All rights reserved.
 */
import { CloudDBZoneAccessProperty, CloudDBZoneSyncProperty, Operation, QueryOperation } from "./enums";
/**
 * Transaction interface describes a transaction.
 * The transaction provides the query, upsert, and delete methods to add,
 * delete, modify, and query data in the Cloud DB zone on the cloud.
 */
export interface Transaction {
    className: string;
    operation: Operation;
    data: any[] | QueryObject;
}
/**
 * This interface defines result object from the runTransaction() method.
 * If the transaction array contains a query, than result of query will be
 * returned on queryResult field, otherwise this field will be empty.
 */
export interface TransactionResult {
    isSuccessful: boolean;
    queryResult: {};
}
/**
 * This interface is used to create a CloudDBZoneConfig object and configure
 * Cloud DB zone information such as the synchronization property,
 * access property, encrypted storage property, and data persistency property.
 */
export interface CloudDBZoneConfig {
    cloudDBZoneName: string;
    accessProperty: CloudDBZoneAccessProperty;
    syncProperty: CloudDBZoneSyncProperty;
    capacity?: number;
    persistenceEnabled?: boolean;
    isEncrypted: boolean;
    key?: string;
    reKey?: string;
}
/**
 * This interface defines object type which on the query will be executed and query conditions.
 */
export interface QueryObject {
    className: string;
    queryElements: QueryElement[];
}
/**
 * This interface defines a single query condition.
 */
export interface QueryElement {
    operation: QueryOperation;
    fieldName?: string;
    offset?: number;
    value?: any;
}
/**
 * CloudDBZoneSnapshot interface is used to describe the queried snapshot data,
 * including full object sets, added and modified object sets, and newly deleted object sets.
 */
export interface CloudDBZoneSnapshotData {
    hasPendingWrites: boolean;
    isFromCloud: boolean;
    snapshotObjects: any[];
    upsertedObjects: any[];
    deletedObjects: any[];
}
/**
 * CloudDBZoneSnapshot interface is used to including full object sets,
 * added and modified object sets, and newly deleted object sets.
 */
export interface CloudDBZoneSnapshot extends CloudDBZoneSnapshotData {
}
/**
 * CloudDBZoneSnapshot interface is used to describe the queried snapshot data.
 */
export interface CloudDBZoneSubscribeSnapshot {
    id: string;
    data?: CloudDBZoneSnapshotData;
    error?: AGCCloudDBException;
}
/**
 * Exception base interface of Cloud DB, which is inherited from AGCException.
 * AGConnectCloudDBException provides methods for developers to obtain exception information,
 * including error codes and detailed error information.
 * @param message An error information.
 * @param code An error code.
 */
export interface AGCCloudDBException {
    message: string;
    code: number;
}
