/**
 * Database interfaces for server and group management
 * These interfaces provide abstraction over the underlying database implementation
 */
import { ServerConfig } from "../types/config.js";
/**
 * Represents a configuration source (where configs are imported from)
 * Stored in the 'configSources' collection.
 */
export interface IConfigSource {
    id: string;
    type: "global" | "app" | "profile";
    appId?: string;
    profileId?: string;
    path: string;
    priority: number;
    lastSynced: number;
}
/**
 * Represents a canonical, internally managed MCP server configuration record.
 * Stored in the 'servers' collection.
 */
export interface ServerConfigRecord {
    id: string;
    name: string;
    type: "stdio" | "http" | "sse";
    config: ServerConfig;
    lastModified: number;
    checksum: string;
    sourceId?: string;
}
/**
 * Represents a named, user-defined collection of ServerConfigRecord IDs.
 * Stored in the 'groups' collection.
 */
export interface ServerConfigGroup {
    id: string;
    name: string;
    description?: string;
    serverIds: string[];
}
/**
 * Interface for interacting with ServerConfigRecord data.
 */
export interface IServerConfigRecordRepository {
    add(server: Omit<ServerConfigRecord, "id">): Promise<ServerConfigRecord>;
    update(server: ServerConfigRecord): Promise<ServerConfigRecord | null>;
    delete(id: string): Promise<boolean>;
    findById(id: string): Promise<ServerConfigRecord | null>;
    findByName(name: string): Promise<ServerConfigRecord | null>;
    findAll(): Promise<ServerConfigRecord[]>;
}
/**
 * Interface for interacting with ServerConfigGroup data.
 */
export interface IServerConfigGroupRepository {
    add(group: Omit<ServerConfigGroup, "id">): Promise<ServerConfigGroup>;
    update(group: ServerConfigGroup): Promise<ServerConfigGroup | null>;
    delete(id: string): Promise<boolean>;
    findById(id: string): Promise<ServerConfigGroup | null>;
    findByName(name: string): Promise<ServerConfigGroup | null>;
    findAll(): Promise<ServerConfigGroup[]>;
    /**
     * Retrieves all ServerConfigRecord objects that are members of a specific group.
     * This method will internally query the IServerConfigRecordRepository.
     */
    findServersInGroup(groupId: string): Promise<ServerConfigRecord[]>;
}
/**
 * Interface for interacting with ConfigSource data.
 */
export interface IConfigSourceRepository {
    add(source: Omit<IConfigSource, "id">): Promise<IConfigSource>;
    update(source: IConfigSource): Promise<IConfigSource | null>;
    delete(id: string): Promise<boolean>;
    findById(id: string): Promise<IConfigSource | null>;
    findByPath(path: string): Promise<IConfigSource | null>;
    findByAppId(appId: string): Promise<IConfigSource[]>;
    findAll(): Promise<IConfigSource[]>;
}
/**
 * Central service interface for managing the database and providing access to repositories.
 */
export interface IDatabaseService {
    servers: IServerConfigRecordRepository;
    groups: IServerConfigGroupRepository;
    configSources: IConfigSourceRepository;
    init(): Promise<void>;
    close(): Promise<void>;
}
//# sourceMappingURL=interfaces.d.ts.map