use common::app_daemon_utils::mock_app_daemon;
use common::prepare_test_env::{prepare_test_db, run_service_for_stream};
use common::test_utils::{airdrop, Key};
use detee_shared::app_proto::brain_app_cli_client::BrainAppCliClient;
use detee_shared::app_proto::{self, DelAppReq};
use std::vec;
use surreal_brain::constants::{ACCOUNT, ACTIVE_APP, DELETED_APP, NEW_APP_REQ, TOKEN_DECIMAL};
use surreal_brain::db::prelude as db;
use crate::common::app_cli_utils::create_new_app;
mod common;
#[tokio::test]
async fn test_app_creation() {
    /*
    env_logger::builder()
        .filter_level(log::LevelFilter::Trace)
        .filter_module("tungstenite", log::LevelFilter::Debug)
        .filter_module("tokio_tungstenite", log::LevelFilter::Debug)
        .init();
    */
    let db = prepare_test_db().await.unwrap();
    let brain_channel = run_service_for_stream().await.unwrap();
    let daemon_key = mock_app_daemon(&brain_channel, None).await.unwrap();
    let key = Key::new();
    let mut new_app_req = app_proto::NewAppReq {
        admin_pubkey: key.pubkey.clone(),
        node_pubkey: daemon_key.clone(),
        price_per_unit: 1200,
        resource: Some(app_proto::AppResource { ports: vec![8080, 8081], ..Default::default() }),
        locked_nano: 100,
        ..Default::default()
    };
    let mut client_app_cli = BrainAppCliClient::new(brain_channel.clone());
    let new_app_resp = client_app_cli.new_app(key.sign_request(new_app_req.clone()).unwrap()).await;
    assert!(new_app_resp.is_err());
    let new_app_err = new_app_resp.err().unwrap();
    assert!(new_app_err.to_string().contains("Insufficient funds"));
    let airdrop_amount = 10;
    airdrop(&brain_channel, &key.pubkey, airdrop_amount).await.unwrap();
    let new_app_resp = client_app_cli
        .new_app(key.sign_request(new_app_req.clone()).unwrap())
        .await
        .unwrap()
        .into_inner();
    let active_app =
        db.select::