//
//  MockDamusState.swift
//  damusTests
//
//  Created by Daniel D’Aquino on 2023-10-13.
//

import Foundation
@testable import damus
import EmojiPicker

// Generates a test damus state with configurable mock parameters
@MainActor
func generate_test_damus_state(
    mock_profile_info: [Pubkey: Profile]?,
    home: HomeModel? = nil,
    addNdbToRelayPool: Bool = true
) -> DamusState {
    // Create a unique temporary directory
    let ndb = Ndb.test
    let our_pubkey = test_pubkey
    let settings = UserSettingsStore()
    
    let profiles: Profiles = {
        guard let mock_profile_info, let profiles: Profiles = MockProfiles(mocked_profiles: mock_profile_info, ndb: ndb) else {
            return Profiles.init(ndb: ndb)
        }
        return profiles
    }()
    
    let mutelist_manager = MutelistManager(user_keypair: test_keypair)
    let damus = DamusState(keypair: test_keypair,
                           likes: .init(our_pubkey: our_pubkey),
                           boosts: .init(our_pubkey: our_pubkey),
                           contacts: .init(our_pubkey: our_pubkey),
                           contactCards: ContactCardManagerMock(),
                           mutelist_manager: mutelist_manager,
                           profiles: profiles,
                           dms: home?.dms ?? .init(our_pubkey: our_pubkey),
                           previews: .init(),
                           zaps: .init(our_pubkey: our_pubkey),
                           lnurls: .init(),
                           settings: settings,
                           relay_filters: .init(our_pubkey: our_pubkey),
                           relay_model_cache: .init(),
                           drafts: .init(),
                           events: .init(ndb: ndb),
                           bookmarks: .init(pubkey: our_pubkey),
                           replies: .init(our_pubkey: our_pubkey),
                           wallet: .init(settings: settings),
                           nav: .init(),
                           music: .init(onChange: {_ in }),
                           video: .init(),
                           ndb: ndb,
                           quote_reposts: .init(our_pubkey: our_pubkey),
                           emoji_provider: DefaultEmojiProvider(showAllVariations: false),
                           favicon_cache: .init(),
                           addNdbToRelayPool: addNdbToRelayPool
    )
    
    home?.damus_state = damus

    return damus
}
