1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use near_sdk::AccountId;
use crate::market::base::{ MarketFeature, MARKET_BASE_FEE, MARKET_REDUCED_FEE, MARKET_MIN_FEE };
use crate::reputation::MAX_REPUTATION;

impl MarketFeature {
    pub fn internal_market_fee(
        &mut self,
        price: &u128,
        account_id: &AccountId,        
    ) -> u128 {
        let mut fee_percent = MARKET_BASE_FEE;  
        
        if self.reputation.is_some() {
            let reputation = self.reputation.as_ref().unwrap().internal_reputation(&account_id);
            
            if reputation > MAX_REPUTATION/2 && reputation != MAX_REPUTATION {
                fee_percent = MARKET_REDUCED_FEE;
            } 
            
            if reputation == MAX_REPUTATION {
                fee_percent = MARKET_MIN_FEE;
            }
        }
        let fee: u128 = price * fee_percent as u128 / 10_000u128;
        
        fee
    }
}