pub mod webhook;

use crate::client::upgrade::Tier;

pub struct Quota {
    pub tier: Tier,
    pub tokens_used: u64,
}

impl Quota {
    pub fn is_over_limit(&self) -> bool {
        match self.tier.cloud_token_quota() {
            Some(limit) => self.tokens_used > limit,
            None => false,
        }
    }

    pub fn enforce(&self) -> Result<(), String> {
        if self.is_over_limit() {
            Err(format!(
                "Monthly cloud token quota exceeded for {:?} tier. Upgrade at {}",
                self.tier,
                self.tier.upgrade_url()
            ))
        } else {
            Ok(())
        }
    }
}

pub struct TierPrice {
    pub tier: Tier,
    pub monthly_usd: f64,
}

pub const TIER_PRICES: &[TierPrice] = &[
    TierPrice {
        tier: Tier::Free,
        monthly_usd: 0.0,
    },
    TierPrice {
        tier: Tier::Beacon,
        monthly_usd: 9.0,
    },
    TierPrice {
        tier: Tier::Studio,
        monthly_usd: 29.0,
    },
    TierPrice {
        tier: Tier::Enterprise,
        monthly_usd: 499.0,
    },
];
