import type { FilterSegmentOutput, SegmentIdentifier } from '../lib/types';
import type { UserFilterSegmentPreference } from '../../../kysely/types.ts';
import type { TCreateFilterSegmentInputSchema, TUpdateFilterSegmentInputSchema } from "./filterSegment.type";
export interface IFilterSegmentRepository {
    get({ userId, tableIdentifier }: {
        userId: number;
        tableIdentifier: string;
    }): Promise<{
        segments: FilterSegmentOutput[];
        preferredSegmentId: SegmentIdentifier | null;
    }>;
    create({ userId, input, }: {
        userId: number;
        input: TCreateFilterSegmentInputSchema;
    }): Promise<FilterSegmentOutput>;
    update({ userId, input, }: {
        userId: number;
        input: TUpdateFilterSegmentInputSchema;
    }): Promise<FilterSegmentOutput>;
    delete({ userId, id }: {
        userId: number;
        id: number;
    }): Promise<void>;
    setPreference({ userId, tableIdentifier, segmentId, }: {
        userId: number;
        tableIdentifier: string;
        segmentId: SegmentIdentifier | null;
    }): Promise<UserFilterSegmentPreference | null>;
}
export declare class FilterSegmentRepository implements IFilterSegmentRepository {
    get({ userId, tableIdentifier }: {
        userId: number;
        tableIdentifier: string;
    }): Promise<{
        segments: FilterSegmentOutput[];
        preferredSegmentId: {
            id: number;
            type: "user";
        } | {
            id: string;
            type: "system";
        } | null;
    }>;
    create({ userId, input }: {
        userId: number;
        input: TCreateFilterSegmentInputSchema;
    }): Promise<FilterSegmentOutput>;
    update({ userId, input }: {
        userId: number;
        input: TUpdateFilterSegmentInputSchema;
    }): Promise<FilterSegmentOutput>;
    delete({ userId, id }: {
        userId: number;
        id: number;
    }): Promise<void>;
    setPreference({ userId, tableIdentifier, segmentId, }: {
        userId: number;
        tableIdentifier: string;
        segmentId: SegmentIdentifier | null;
    }): Promise<{
        id: number;
        userId: number;
        createdAt: Date;
        updatedAt: Date;
        tableIdentifier: string;
        segmentId: number | null;
        systemSegmentId: string | null;
    } | null>;
}
//# sourceMappingURL=filterSegment.d.ts.map