use odra::{types::Address, Mapping, UnwrapOrRevert};
use crate::{utils::Error, voting::types::VotingId};
use super::refs::ContractRefs;
#[odra::module]
pub struct KycInfo {
refs: ContractRefs,
votings: Mapping<Address, Option<VotingId>>,
addresses: Mapping<VotingId, Address>,
}
impl KycInfo {
pub fn is_kycd(&self, address: &Address) -> bool {
!self.refs.kyc_token().balance_of(address).is_zero()
}
pub fn set_voting(&mut self, address: Address, voting_id: VotingId) {
self.votings.set(&address, Some(voting_id));
self.addresses.set(&voting_id, address);
}
pub fn clear_voting(&mut self, address: &Address) {
self.votings.set(address, None);
}
pub fn exists_ongoing_voting(&self, address: &Address) -> bool {
self.votings.get(address).is_some()
}
pub fn get_voting_subject(&self, voting_id: VotingId) -> Address {
self.addresses
.get(&voting_id)
.unwrap_or_revert_with(Error::VotingAddressNotFound)
}
}