
from typing import Dict, List



class MarketBiddingC1Calculator:
    """市场竞价C1计算器"""
    
    def __init__(self):
        """初始化计算器"""
        pass
    
    def calculate_market_bidding_c1(self, 
                                   transaction_data: Dict = None,
                                   manual_bids: List[float] = None,
                                   expert_valuations: List[float] = None) -> float:
        """
        计算市场竞价C1
        1)取同一资产或同品类、同等级资产最近3个月内成功交易的加权平均价格。
        2)人工采集主流文化产权交易所、拍卖平台（如阿里拍卖、京东拍卖）上相似资产的当前报价或起拍价，取其中位数。
        3)若以上数据均缺失，由系统内置专家库中随机指派3位专家独立给出估值，取平均值。

        
        args:
            transaction_data: 交易数据字典 (API获取)
            manual_bids: 手动收集的竞价列表 (用户填写)
            expert_valuations: 专家估值列表 (系统配置)
            
        retusn:
            float: 市场竞价C1
        """
        # 优先级1：近3个月交易数据
        if transaction_data and transaction_data.get('weighted_average_price'):
            return transaction_data['weighted_average_price']
        
        # 优先级2：手动收集的竞价数据
        if manual_bids and len(manual_bids) > 0:
            # 取中位数
            sorted_bids = sorted(manual_bids)
            n = len(sorted_bids)
            if n % 2 == 0:
                return (sorted_bids[n//2-1] + sorted_bids[n//2]) / 2
            else:
                return sorted_bids[n//2]
        
        # 优先级3：专家估值
        if expert_valuations and len(expert_valuations) > 0:
            return sum(expert_valuations) / len(expert_valuations)
        
        # 默认值
        return 0.0

# 示例使用
if __name__ == "__main__":
    # 创建计算器实例
    calculator = MarketBiddingC1Calculator()
    
    # 示例数据
    asset_type = "传统工艺"  # 资产类型 (用户填写)
    time_period = "近一年"  # 时间周期 (用户填写)
    transaction_volume = 500  # 交易量 (API获取)
    transaction_frequency = "中频"  # 交易频率 (用户填写)
    market_liquidity = "中"  # 市场流动性 (用户填写)

    # 示例数据
    # 优先级1：近3个月交易数据
    transaction_data = {"weighted_average_price": 1000.0}  # API获取
    
    # 优先级2：手动收集的竞价数据
    manual_bids = [950.0, 1000.0, 1050.0, 1100.0]  # 用户填写
    
    # 优先级3：专家估值
    expert_valuations = [0.0, 0.0, 0.0]  # 系统配置
    
    # 计算市场竞价C1
    market_bidding_c1 = calculator.calculate_market_bidding_c1(
        transaction_data, manual_bids, expert_valuations
    )
    
    print(f"近3个月交易数据: {transaction_data}")
    print(f"手动收集竞价: {manual_bids}")
    print(f"专家估值: {expert_valuations}")
    print(f"市场竞价C1: {market_bidding_c1:.2f}")

