#pragma once

#include "lite_wallet_server_selection_adapter.h"
#include "lite_wallet_lifecycle_service.h"
#include "wallet_capabilities.h"

#include "../config/settings.h"

namespace dragonx {
namespace wallet {

struct LiteWalletLifecycleUiPrerequisites {
    bool selectedServerDisplayReady = false;
    bool lifecycleUiOwnerReady = false;
    bool operationConfirmed = false;
    bool privateDataRedactionReady = false;
    bool syncPlannerFeedReady = false;
    bool realLifecycleExecutionRequested = false;
};

struct LiteWalletLifecycleUiRequestIntent {
    bool requestProvided = false;
    LiteWalletLifecycleOperation operation = LiteWalletLifecycleOperation::CreateNew;
    LiteWalletCreateRequest createRequest;
    LiteWalletOpenRequest openRequest;
    LiteWalletRestoreRequest restoreRequest;
};

struct LiteWalletLifecycleUiExecutionInput {
    WalletCapabilities capabilities;
    LiteWalletLifecycleUiRequestIntent request;
    bool settingsLoaded = true;
    bool requirePersistedServerSelectionIntent = true;
    LiteWalletLifecycleUiPrerequisites ui;

    bool settingsWriteRequested = false;
    bool serverConnectivityCheckRequested = false;
    bool walletExistsCheckRequested = false;
    bool walletLifecycleExecutionRequested = false;
    bool syncStartRequested = false;
    bool syncStatusPollingRequested = false;
    bool workerQueueEnqueueRequested = false;
    bool walletStateMutationRequested = false;
    bool walletFilePersistenceRequested = false;
    bool sendImportExportExecutionRequested = false;
};

} // namespace wallet
} // namespace dragonx
