import { DocumentData, DocumentReference, Firestore } from 'firebase/firestore';
import { UserType } from '../../interfaces';
export interface UserInfo {
    roarUid?: string;
    assessmentUid: string;
    assessmentPid?: string;
    userType?: UserType;
    userMetadata?: {
        [key: string]: unknown;
    };
    testData?: boolean;
    demoData?: boolean;
    offlineEnabled?: boolean;
    offlineTasks?: string[];
    offlineAdministrations?: string[];
}
export interface UserInput extends UserInfo {
    db: Firestore;
}
export interface UserUpdateInput {
    /** These are keys that all users can update */
    tasks?: string[];
    variants?: string[];
    /** And these are keys that only guest users will be able to create/update */
    assessmentPid?: string;
    [key: string]: unknown;
}
/** Class representing a ROAR user */
export declare class RoarAppUser {
    db: Firestore;
    roarUid?: string;
    assessmentUid: string;
    assessmentPid?: string;
    userData?: DocumentData;
    userType: UserType;
    onFirestore?: boolean;
    userRef: DocumentReference;
    userMetadata: {
        [key: string]: unknown;
    };
    testData: boolean;
    demoData: boolean;
    offlineEnabled: boolean;
    offlineTasks: string[];
    offlineAdministrations: string[];
    /** Create a ROAR user
     * @param {object} input
     * @param {Firestore} input.db - The assessment Firestore instance to which this user's data will be written
     * @param {string} input.roarUid - The ROAR ID of the user
     * @param {string} input.assessmentUid - The assessment firebase UID of the user
     * @param {string} input.assessmentPid - The assessment PID of the user
     * @param {string} input.userType - The user type. Must be either 'admin', 'educator', 'student', 'caregiver', 'guest', or 'researcher.'
     * @param {object} input.userMetadata - An object containing additional user metadata
     * @param {string} input.testData = Boolean flag indicating test data
     * @param {string} input.demoData = Boolean flag indicating demo data
     * @param {string} input.offlineEnabled = Boolean flag indicating whether user has enrolled in Offline ROAR
     * @param {string[]} input.offlineTasks = Array of task IDs that user will need access to offline
     * @param {string[]} input.offlineAdministrations = Array of administration IDs that user will need access to offline
     */
    constructor({ db, roarUid, assessmentUid, assessmentPid, userType, userMetadata, testData, demoData, offlineEnabled, offlineTasks, offlineAdministrations, }: UserInput);
    init(): Promise<void>;
    private _setUserData;
    checkUserExists(): Promise<void>;
    /**
     * Update the user's data (both locally and in Firestore)
     * @param {object} input
     * @param {string[]} input.tasks - The tasks to be added to the user doc
     * @param {string[]} input.variants - The variants to be added to the user doc
     * @param {string} input.assessmentPid - The assessment PID of the user
     * @param {*} input.userMetadata - Any additional user metadata
     * @method
     * @async
     */
    updateUser({ tasks, variants, assessmentPid, ...userMetadata }: UserUpdateInput): Promise<void>;
    /**
     * Update the user's "lastUpdated" timestamp
     * @method
     * @async
     */
    updateFirestoreTimestamp(): Promise<void>;
}
