import { IntegrationConfig, IntegrationCredentials, IntegrationFilesSnapshot, IntegrationSyncSettings, IntegrationWebhooks, Provider } from '../modules/integration/types';
import { CreateJobParams, GetActiveJobsParams, GetAllJobsParams, GetFileTranslationCache, GetFileTranslationCacheByLanguageParams, GetJobParams, GetUnsyncedFiles, IntegrationSyncedData, Job, TranslationCache, UnsyncedFiles, UpdateJobParams, UpdateTranslationCacheParams } from '../modules/integration/util/types';
import { CrowdinCredentials } from '../types';
import { D1_DB } from './drizzle/d1/types';
import { POSTGRESQL_DB } from './drizzle/postgresql';
import { SQLITE_DB } from './drizzle/sqlite';
export interface UserErrors {
    id: number;
    action: string;
    message: string;
    data: any;
    createdAt: string;
    crowdinId: string;
    integrationId?: string;
}
export type DB_TYPE = 'sqlite' | 'postgresql' | 'd1';
export type DRIZZLE_DB = SQLITE_DB | POSTGRESQL_DB | D1_DB;
export interface Storage {
    db: DRIZZLE_DB;
    migrateDelayed(): Promise<void>;
    saveCrowdinCredentials(credentials: CrowdinCredentials): Promise<void>;
    updateCrowdinCredentials(credentials: CrowdinCredentials): Promise<void>;
    getCrowdinCredentials(id: string): Promise<CrowdinCredentials | undefined>;
    getAllCrowdinCredentials(): Promise<CrowdinCredentials[]>;
    deleteCrowdinCredentials(id: string): Promise<void>;
    saveIntegrationCredentials(id: string, credentials: string, crowdinId: string): Promise<void>;
    updateIntegrationCredentials(id: string, credentials: string): Promise<void>;
    updateIntegrationManagers(id: string, managers: string): Promise<void>;
    getIntegrationCredentials(id: string): Promise<IntegrationCredentials | undefined>;
    getAllIntegrationCredentials(crowdinId: string): Promise<IntegrationCredentials[]>;
    deleteIntegrationCredentials(id: string): Promise<void>;
    deleteAllIntegrationCredentials(crowdinId: string): Promise<void>;
    saveMetadata(id: string, metadata: any, crowdinId: string): Promise<void>;
    updateMetadata(id: string, metadata: any, crowdinId: string): Promise<void>;
    getMetadata(id: string): Promise<any | undefined>;
    getAllMetadata(): Promise<any[] | undefined>;
    deleteMetadata(id: string): Promise<void>;
    getSyncSettingsByProvider(integrationId: string, provider: Provider): Promise<IntegrationSyncSettings | undefined>;
    getSyncSettingsBySchedule(type: string, schedule: string): Promise<IntegrationSyncSettings[]>;
    saveSyncSettings(files: string, integrationId: string, crowdinId: string, type: string, provider: Provider): Promise<void>;
    updateSyncSettings(files: string, integrationId: string, crowdinId: string, type: string, provider: Provider): Promise<void>;
    getSyncSettings(integrationId: string, crowdinId: string, type: string, provider: Provider): Promise<IntegrationSyncSettings | undefined>;
    saveFilesSnapshot(files: string, integrationId: string, crowdinId: string, provider: Provider): Promise<void>;
    updateFilesSnapshot(files: string, integrationId: string, crowdinId: string, provider: Provider): Promise<void>;
    getFilesSnapshot(integrationId: string, crowdinId: string, provider: Provider): Promise<IntegrationFilesSnapshot | undefined>;
    getAllWebhooks(integrationId: string, crowdinId: string, provider: Provider): Promise<IntegrationWebhooks[] | undefined>;
    getWebhooks(fileId: string, integrationId: string, crowdinId: string, provider: Provider): Promise<IntegrationWebhooks | undefined>;
    saveWebhooks(fileId: string, integrationId: string, crowdinId: string, provider: Provider): Promise<void>;
    deleteWebhooks(fileIds: string[], integrationId: string, crowdinId: string, provider: Provider): Promise<void>;
    getAllUserErrors(crowdinId: string, integrationId?: string): Promise<UserErrors[] | undefined>;
    saveUserError(action: string, message: string, data: string, createdAt: string, crowdinId: string, integrationId?: string): Promise<void>;
    deleteUserErrors(date: string, crowdinId: string, integrationId?: string): Promise<void>;
    deleteAllUsersErrorsOlderThan(date: string): Promise<void>;
    saveIntegrationConfig(integrationId: string, crowdinId: string, config: string): Promise<void>;
    getAllIntegrationConfigs(crowdinId: string): Promise<IntegrationConfig[]>;
    getIntegrationConfig(integrationId: string): Promise<IntegrationConfig | undefined>;
    updateIntegrationConfig(integrationId: string, config: string): Promise<void>;
    createJob(params: CreateJobParams): Promise<string>;
    updateJob(params: UpdateJobParams): Promise<void>;
    getJob(params: GetJobParams): Promise<Job | undefined>;
    getActiveJobs(params: GetActiveJobsParams): Promise<Job[] | undefined>;
    deleteFinishedJobs(): Promise<void>;
    getAllInProgressJobs(): Promise<Job[] | undefined>;
    getAllJobs(params: GetAllJobsParams): Promise<Job[] | undefined>;
    saveTranslationCache(params: TranslationCache): Promise<void>;
    getFileTranslationCache(params: GetFileTranslationCache): Promise<TranslationCache[] | undefined>;
    getFileTranslationCacheByLanguage(params: GetFileTranslationCacheByLanguageParams): Promise<TranslationCache | undefined>;
    updateTranslationCache(params: UpdateTranslationCacheParams): Promise<void>;
    saveUnsyncedFiles(params: UnsyncedFiles): Promise<void>;
    getUnsyncedFiles(params: GetUnsyncedFiles): Promise<UnsyncedFiles | undefined>;
    updateUnsyncedFiles(params: UnsyncedFiles): Promise<void>;
    saveSyncedData(files: string, integrationId: string, crowdinId: string, type: string): Promise<void>;
    updateSyncedData(files: string, integrationId: string, crowdinId: string, type: string): Promise<void>;
    getSyncedData(integrationId: string, crowdinId: string, type: string): Promise<IntegrationSyncedData | undefined>;
}
