import { DataSource, DataSourceOptions, Repository } from "typeorm";
import "tslib";
import { Client, ExecutionError, Logging, Message } from "./entities/others";
import { Client as ClientSqlite3, Message as MessageSqlite3, Logging as LoggingSqlite3 } from "./entities/sqlite3";
import { CustomerWorkflowHistory } from "../..";
export declare class Database {
    private options;
    private dataSource;
    private transactionManager?;
    private ClientEntity;
    private MessageEntity;
    private LoggingEntity;
    private ExecutionErrorsEntity;
    constructor(options: DataSourceOptions & {
        type: "postgres" | "sqlite";
        initialDatabase?: string;
    });
    init(): Promise<void>;
    _client(): DataSource;
    get instance(): "postgres" | "sqlite";
    _query(query: string, params?: any[]): Promise<any>;
    private executeTransaction;
    handleDbOperation<T>(operation: () => Promise<T>): Promise<T | string>;
    getRepository<T>(entity: new () => T): Repository<T>;
    upsertClient(data: Partial<Client | ClientSqlite3>): Promise<void>;
    getClient<T = Client | ClientSqlite3 | null>(phone: string): Promise<T>;
    getPauseClients<T = Client[] | ClientSqlite3[]>(): Promise<T>;
    pauseClientActivity(phone: string, is_paused: boolean): Promise<void>;
    messages<T = Message[] | MessageSqlite3[]>(phone: string, limit?: number): Promise<T>;
    upsertMessage(data: Partial<Message | MessageSqlite3>): Promise<void>;
    getMessagesOfCurrentWeek<T = Message[] | MessageSqlite3[]>(): Promise<T>;
    getMessagesOfCurrentMonth<T = Message[] | MessageSqlite3[]>(limit?: number): Promise<T>;
    getNotDeliveredMessages<T = Logging[] | LoggingSqlite3[]>(): Promise<T>;
    logging<T = void>(params: Partial<Logging>): Promise<T>;
    ensureTableFlow<T = void>(): Promise<T>;
    insertCustomerWorkflowHistory(data: Partial<CustomerWorkflowHistory>): Promise<any>;
    generateMermaidDiagram<T = string | null>(phone: string): Promise<T>;
    getLastFlowForUser<T = CustomerWorkflowHistory | null>(phone: string): Promise<T>;
    ensureTableFollowUp<T = void>(): Promise<T>;
    save_error<T = ExecutionError>(error: Partial<ExecutionError>): Promise<T>;
}
