import type { ExtractTablesWithRelations } from 'drizzle-orm';
import type { PgTransaction } from 'drizzle-orm/pg-core';
import type { PostgresJsQueryResultHKT } from 'drizzle-orm/postgres-js';
import { type NewSubmission, type Submission } from '@overture-stack/lyric-data-model/models';
import { BaseDependencies } from '../config/config.js';
import type { PaginationOptions, SubmissionDataDetailsRepositoryRecord, SubmissionDataSummaryRepositoryRecord } from '../utils/types.js';
declare const activeSubmissionRepository: (dependencies: BaseDependencies) => {
    /**
     * Save a new Active Submission in Database
     * @param data An Active Submission object to be saved
     * @returns The ID of the created Active Submission
     */
    save: (data: NewSubmission) => Promise<number>;
    /**
     * Returns the entire active submission, including all data.
     */
    getActiveSubmissionDetails: ({ categoryId, organization, username, }: {
        categoryId: number;
        username: string;
        organization: string;
    }) => Promise<Pick<Submission, "data" | "id"> | undefined>;
    /**
     * Finds the current Active Submission by parameters
     * @param {Object} params
     * @param {number} params.categoryId Category ID
     * @param {string} params.username Name of the user
     * @param {string} params.organization Organization name
     * @returns
     */
    getActiveSubmissionSummary: ({ categoryId, username, organization, }: {
        categoryId: number;
        username: string;
        organization: string;
    }) => Promise<SubmissionDataSummaryRepositoryRecord | undefined>;
    /**
     * Finds a Submission by ID
     * @param {number} submissionId Submission ID
     * @returns The Submission found
     */
    getSubmissionById: (submissionId: number) => Promise<SubmissionDataSummaryRepositoryRecord | undefined>;
    /**
     * Retun the Submission with data details by ID
     * This includes the `data` and `errors` columns
     * @param {number} submissionId Submission ID
     * @returns The Submission found
     */
    getSubmissionDetailsById: (submissionId: number) => Promise<SubmissionDataDetailsRepositoryRecord | undefined>;
    /**
     * Update a Submission record in database
     * @param {number} submissionId Submission ID to update
     * @param {Partial<Submission>} newData Set fields to update
     * @param tx The transaction to use for the operation, optional
     * @returns An updated record
     */
    update: (submissionId: number, newData: Partial<Submission>, tx?: PgTransaction<PostgresJsQueryResultHKT, Submission, ExtractTablesWithRelations<Submission>>) => Promise<number>;
    /**
     * Get Submissions by category
     * @param {number} categoryId - Category ID
     * @param {Object} paginationOptions - Pagination properties
     * @param {number} paginationOptions.page - Page number
     * @param {number} paginationOptions.pageSize - Items per page
     * @param {Object} filterOptions
     * @param {boolean} filterOptions.onlyActive - Filter by Active status
     * @param {string} filterOptions.username - Filter by creator's username
     * @param {string} filterOptions.organization - Filter by Organization
     * @returns One or many Active Submissions
     */
    getSubmissionsByCategory: (categoryId: number, paginationOptions: PaginationOptions, filterOptions: {
        onlyActive: boolean;
        username?: string;
        organization?: string;
    }) => Promise<SubmissionDataSummaryRepositoryRecord[] | undefined>;
    /**
     * Count Submissions by category ID
     * @param {number} categoryId - Category ID
     * @param {Object} filterOptions
     * @param {boolean} filterOptions.onlyActive - Filter by Active status
     * @param {string} filterOptions.username - Filter by creator's username
     * @param {string} filterOptions.organization - Filter by Organization
     * @returns One or many Active Submissions
     */
    getTotalSubmissionsByCategory: (categoryId: number, filterOptions: {
        onlyActive: boolean;
        username?: string;
        organization?: string;
    }) => Promise<number>;
};
export default activeSubmissionRepository;
