/**
 * Entity Test Data Factories
 * Provides consistent test data generation for domain entities
 */
export interface MockUserEntity {
    _id: string;
    id?: string;
    name: string;
    email: string;
    firstName?: string;
    lastName?: string;
    status: 'active' | 'inactive' | 'deleted';
    userType?: 'business' | 'individual' | 'admin';
    verified?: boolean;
    phone?: string;
    createdAt: Date;
    updatedAt: Date;
    profile?: MockProfileEntity;
    business?: MockBusinessEntity;
    posts?: MockPostEntity[];
}
export interface MockProfileEntity {
    _id: string;
    id?: string;
    bio: string;
    avatar?: string;
    userId: string;
    profileKind: 'doctor' | 'patient' | 'admin';
}
export interface MockBusinessEntity {
    _id: string;
    id?: string;
    name: string;
    type: string;
    ownerId: string;
    owner?: MockUserEntity;
    contact?: MockContactEntity;
}
export interface MockPostEntity {
    _id: string;
    id?: string;
    title: string;
    content: string;
    authorId: string;
    author?: MockUserEntity;
    comments?: MockCommentEntity[];
}
export interface MockCommentEntity {
    _id: string;
    id?: string;
    content: string;
    authorId: string;
    author?: MockUserEntity;
}
export interface MockContactEntity {
    _id: string;
    id?: string;
    email: string;
    phone: string;
}
export interface MockFileEntity {
    _id: string;
    id?: string;
    name: string;
    originalName: string;
    mimeType: string;
    size: number;
    fileType: 'image' | 'document' | 'video' | 'audio';
    userId: string;
    user?: MockUserEntity;
    folderId?: string;
    folder?: MockFolderEntity;
    tags?: string[];
    createdAt: Date;
    updatedAt: Date;
}
export interface MockFolderEntity {
    _id: string;
    id?: string;
    name: string;
    userId: string;
    user?: MockUserEntity;
}
/**
 * Entity Factory - Creates consistent test entities with sensible defaults
 */
export declare class EntityFactory {
    private static idCounter;
    private static generateId;
    static createUser(overrides?: Partial<MockUserEntity>): MockUserEntity;
    static createBusinessUser(overrides?: Partial<MockUserEntity>): MockUserEntity;
    static createAdminUser(overrides?: Partial<MockUserEntity>): MockUserEntity;
    static createProfile(userId?: string, overrides?: Partial<MockProfileEntity>): MockProfileEntity;
    static createDoctorProfile(userId?: string, overrides?: Partial<MockProfileEntity>): MockProfileEntity;
    static createBusiness(ownerId?: string, overrides?: Partial<MockBusinessEntity>): MockBusinessEntity;
    static createPost(authorId?: string, overrides?: Partial<MockPostEntity>): MockPostEntity;
    static createComment(authorId?: string, overrides?: Partial<MockCommentEntity>): MockCommentEntity;
    static createFile(userId?: string, overrides?: Partial<MockFileEntity>): MockFileEntity;
    static createFolder(userId?: string, overrides?: Partial<MockFolderEntity>): MockFolderEntity;
    /**
     * Creates entities with relationships pre-populated
     */
    static createUserWithRelations(overrides?: Partial<MockUserEntity>): MockUserEntity;
    /**
     * Creates arrays of entities for list/pagination scenarios
     */
    static createUsers(count: number, overrides?: Partial<MockUserEntity>): MockUserEntity[];
    static createFiles(count: number, userId?: string, overrides?: Partial<MockFileEntity>): MockFileEntity[];
    /**
     * Creates entities for specific test scenarios
     */
    static createInactiveUser(overrides?: Partial<MockUserEntity>): MockUserEntity;
    static createDeletedUser(overrides?: Partial<MockUserEntity>): MockUserEntity;
    static createLargeFile(userId?: string, overrides?: Partial<MockFileEntity>): MockFileEntity;
    /**
     * Reset the ID counter for consistent test runs
     */
    static resetIdCounter(): void;
}
/**
 * Builder Pattern for Complex Entity Creation
 */
export declare class UserBuilder {
    private user;
    static create(): UserBuilder;
    withBasicInfo(name: string, email: string): UserBuilder;
    withStatus(status: 'active' | 'inactive' | 'deleted'): UserBuilder;
    withType(userType: 'business' | 'individual' | 'admin'): UserBuilder;
    withVerification(verified: boolean): UserBuilder;
    withPhone(phone: string): UserBuilder;
    withProfile(profile: MockProfileEntity): UserBuilder;
    withBusiness(business: MockBusinessEntity): UserBuilder;
    withPosts(posts: MockPostEntity[]): UserBuilder;
    build(): MockUserEntity;
}
/**
 * Scenario-based entity creation
 */
export declare class EntityScenarios {
    /**
     * Doctor with complete profile and business
     */
    static doctorWithClinic(): MockUserEntity;
    /**
     * Patient with medical files
     */
    static patientWithFiles(): MockUserEntity;
    /**
     * Admin user with system access
     */
    static systemAdmin(): MockUserEntity;
}
