export interface Installation {
    id: number;
    account: string;
    accountType: string;
    suspended: boolean;
    createdAt: Date;
    updatedAt: Date;
}
export interface UserSession {
    userId: number;
    login: string;
    accessToken: string;
    installationId?: number;
    createdAt: Date;
}
export interface RepositoryConfig {
    installationId: number;
    repository: string;
    templates: string[];
    mergeStrategy: 'overwrite' | 'merge' | 'skip';
    excludePatterns: string[];
    autoUpdate: boolean;
    createdAt: Date;
    updatedAt: Date;
}
export interface Job {
    id?: number;
    type: string;
    installationId: number;
    targetRepository: string;
    templateRepository: string;
    status: 'pending' | 'running' | 'completed' | 'failed';
    result?: any;
    error?: string;
    createdAt: Date;
    updatedAt?: Date;
}
export interface TemplateConfiguration {
    templateRepository: string;
    targetRepository: string;
    installationId: number;
    autoUpdate: boolean;
}
export interface InstallationConfig {
    installationId: number;
    autoConfigureTemplates: boolean;
    defaultTemplates: string[];
}
export declare class Database {
    private db;
    private runAsync;
    private getAsync;
    private allAsync;
    constructor(dbPath: string);
    initialize(): Promise<void>;
    private createTables;
    createInstallation(installation: Omit<Installation, 'suspended' | 'createdAt' | 'updatedAt'>): Promise<void>;
    deleteInstallation(installationId: number): Promise<void>;
    suspendInstallation(installationId: number): Promise<void>;
    unsuspendInstallation(installationId: number): Promise<void>;
    createUserSession(session: UserSession): Promise<void>;
    getUserSessionByToken(accessToken: string): Promise<UserSession | null>;
    deleteUserSession(userId: number): Promise<void>;
    addRepositoryToInstallation(installationId: number, repository: string, fullName: string): Promise<void>;
    removeRepositoryFromInstallation(installationId: number, repository: string): Promise<void>;
    saveRepositoryConfig(config: RepositoryConfig): Promise<void>;
    getRepositoryConfig(installationId: number, repository: string): Promise<RepositoryConfig | null>;
    deleteRepositoryConfig(repository: string): Promise<void>;
    queueJob(job: Job): Promise<void>;
    getQueuedJobs(limit?: number): Promise<Job[]>;
    updateJobStatus(jobId: number, status: string, result?: any, error?: string): Promise<void>;
    getTemplateConfigurations(templateRepository: string): Promise<TemplateConfiguration[]>;
    getInstallationConfig(installationId: number): Promise<InstallationConfig | null>;
    saveInstallationConfig(config: InstallationConfig): Promise<void>;
    close(): Promise<void>;
}
//# sourceMappingURL=database.d.ts.map