use andromeda_std::{
andr_exec, andr_instantiate, andr_instantiate_modules, andr_query, common::MillisecondsDuration,
};
use cosmwasm_schema::{cw_serde, QueryResponses};
use cosmwasm_std::{Timestamp, Uint128};
#[cw_serde]
pub struct AccountDetails {
pub balance: Uint128,
pub latest_withdrawal: Option<Timestamp>,
}
#[cw_serde]
pub struct CoinAndLimit {
pub coin: String,
pub limit: Uint128,
}
#[cw_serde]
pub struct CoinAllowance {
pub coin: String,
pub limit: Uint128,
pub minimal_withdrawal_frequency: MillisecondsDuration,
}
#[cw_serde]
pub struct ContractAndKey {
pub contract_address: String,
pub key: Option<String>,
}
#[andr_instantiate]
#[andr_instantiate_modules]
#[cw_serde]
pub struct InstantiateMsg {
pub allowed_coin: CoinAndLimit,
pub minimal_withdrawal_frequency: MinimumFrequency,
}
#[cw_serde]
pub enum MinimumFrequency {
Time { time: MillisecondsDuration },
}
#[andr_exec]
#[cw_serde]
pub enum ExecuteMsg {
Deposits { recipient: Option<String> },
WithdrawFunds { amount: Uint128 },
}
#[andr_query]
#[cw_serde]
#[derive(QueryResponses)]
pub enum QueryMsg {
#[returns(CoinAllowance)]
CoinAllowanceDetails {},
#[returns(AccountDetails)]
AccountDetails { account: String },
}