use api_models::{enums, payment_methods::Card, payouts};
use common_utils::{
    errors::CustomResult,
    ext_traits::{AsyncExt, StringExt},
};
use diesel_models::encryption::Encryption;
use error_stack::ResultExt;
use masking::{ExposeInterface, PeekInterface, Secret};
use router_env::logger;
use super::PayoutData;
use crate::{
    core::{
        errors::{self, RouterResult, StorageErrorExt},
        payment_methods::{
            cards,
            transformers::{DataDuplicationCheck, StoreCardReq, StoreGenericReq, StoreLockerReq},
            vault,
        },
        payments::{
            customers::get_connector_customer_details_if_present, route_connector_v1, routing,
            CustomerDetails,
        },
        routing::TransactionData,
        utils as core_utils,
    },
    db::StorageInterface,
    routes::{metrics, AppState},
    services,
    types::{
        api::{self, enums as api_enums},
        domain::{
            self,
            types::{self as domain_types, AsyncLift},
        },
        storage,
        transformers::ForeignFrom,
    },
    utils::{self, OptionExt},
};
#[allow(clippy::too_many_arguments)]
pub async fn make_payout_method_data<'a>(
    state: &'a AppState,
    payout_method_data: Option<&api::PayoutMethodData>,
    payout_token: Option<&str>,
    customer_id: &str,
    merchant_id: &str,
    payout_type: Option<&api_enums::PayoutType>,
    merchant_key_store: &domain::MerchantKeyStore,
    payout_data: Option<&mut PayoutData>,
    storage_scheme: storage::enums::MerchantStorageScheme,
) -> RouterResult