"""
动态质押率DPR计算模块

动态质押率DPR=基础质押率*(1+ 流量修正系数)+ 政策加成系数- 流动性调节因子

"""



class DynamicPledgeRateCalculator:
    """DRP计算器"""

    def __init__(self):
        pass

    def calculate_dynamic_pledge_rate(self,
            monthly_amount: float,
            heritage_level: str,
    ) -> float:
        """
        动态质押率 DPR 计算公式：
            DPR = 基础质押率 * (1 + 流量修正系数) + 政策加成系数 - 流动性调节因子

        参数:
            monthly_amount (float): 月交易额（万元）
            heritage_level (str): 非遗等级
            liquidity_adjustment (float): 流动性调节因子（例如 0.05 表示5%）

        固定参数:
            基础质押率 = 0.5
            流量修正系数 = 0.3
        """
        base_rate = 0.5
        flow_correction = 0.3

        # ① 交易额得分影响可嵌入流量修正或单独展示，这里保持原式不变
        policy_bonus = self.get_heritage_level_score(heritage_level)
        liquidity_adjustment = self.get_monthly_transaction_score(monthly_amount)
        dpr = base_rate * (1 + flow_correction) + policy_bonus - liquidity_adjustment
        return round(dpr, 4)

    def get_heritage_level_score(self, level: str) -> float:
        """
        根据用户所选的非遗等级匹配系数分数。

        规则：
            ① 国家级非遗                    => +0.05
            ② 省级非遗                      => +0.03
            ③ 纳入《国家文化数字化战略清单》 => +0.02
            ④ 无                           => 0.0

        参数:
            level (str): 用户选择的非遗等级描述

        返回:
            float: 对应的分数
        """
        level = level.strip()

        if "国家级" in level:
            return 0.05
        elif "省级" in level:
            return 0.03
        elif "国家文化数字化战略清单" in level:
            return 0.02
        else:
            return 0.0

    def parse_monthly_transaction_amount(self, monthly_transaction_str: str) -> float:
        """
        解析月交易额字符串，转换为数值（万元）

        参数:
            monthly_transaction_str (str): 月交易额字符串，如"月交易额<100万元"、"100-500万元"等

        返回:
            float: 月交易额数值（万元）
        """
        if not monthly_transaction_str:
            return 0.0
        
        # 清理字符串，移除空格和常见前缀
        clean_str = monthly_transaction_str.strip().replace("月交易额", "").replace("万元", "")
        
        # 处理不同的格式
        if "<100" in clean_str or "小于100" in clean_str:
            return 50.0  # 取中间值
        elif "100-500" in clean_str or "100万-500万" in clean_str:
            return 300.0  # 取中间值
        elif ">500" in clean_str or "大于500" in clean_str or "≥500" in clean_str:
            return 600.0  # 取一个合理值
        elif "500-1000" in clean_str:
            return 750.0  # 取中间值
        elif ">1000" in clean_str or "大于1000" in clean_str:
            return 1200.0  # 取一个合理值
        else:
            # 尝试提取数字
            import re
            numbers = re.findall(r'\d+', clean_str)
            if numbers:
                # 如果有多个数字，取平均值
                if len(numbers) >= 2:
                    return (float(numbers[0]) + float(numbers[1])) / 2
                else:
                    return float(numbers[0])
            else:
                # 默认值
                return 50.0

    def get_monthly_transaction_score(self, monthly_amount: float) -> float:
        """
        根据用户月交易额区间匹配评分。

        规则：
            ① 月交易额 < 100万        => -0.1
            ② 月交易额 ∈ [100万, 500万) =>  0
            ③ 月交易额 ≥ 500万        => +0.15

        参数:
            monthly_amount (float): 月交易额（单位：万元）

        返回:
            float: 对应的评分
        """
        if monthly_amount < 100:
            return -0.1
        elif monthly_amount < 500:
            return 0.0
        else:
            return 0.15


# 示例使用
if __name__ == "__main__":
    # 创建计算器实例
    calculator = DynamicPledgeRateCalculator()
    # 示例1：国家级非遗，月交易额500万，流动性调节因子0.05
    print(calculator.calculate_dynamic_pledge_rate(500, "国家级非遗"))
    # 结果：0.55

    # 示例2：省级非遗，流动性调节因子0.02
    print(calculator.calculate_dynamic_pledge_rate(300, "省级非遗"))
    # 结果：0.68

    # 示例3：无非遗，流动性调节因子0.1
    print(calculator.calculate_dynamic_pledge_rate(50, "无"))
    # 0.75
