import { useState, useCallback, useMemo } from 'react';
import type { TradeRecord, DailyProfit, ProfitSummary, StockData } from '../types/index';

export function useProfitCalculator(stockData: StockData[], trades: TradeRecord[]) {
  const [currentDate, setCurrentDate] = useState<string>('');

  // 计算每日收益（采用答题卡的计算方式：单日涨幅简单相加）
  const dailyProfits = useMemo(() => {
    const profitMap = new Map<string, DailyProfit>();
    let accumulatedProfit = 0;  // 累计收益
    
    // 按日期分组交易
    trades.forEach(trade => {
      const date = trade.date;
      if (!profitMap.has(date)) {
        profitMap.set(date, {
          date,
          profit: accumulatedProfit,  // 使用当前累计收益作为初始值
          trades: [],
        });
      }
      
      const dailyProfit = profitMap.get(date)!;
      dailyProfit.trades.push(trade);
    });
    
    return Array.from(profitMap.values());
  }, [trades]);

  // 计算当日行情（采用答题卡的计算方式：基于价格变化百分比）
  const profitSummary = useMemo(() => {
    // 获取累计收益（单日涨幅简单相加）
    let totalProfit = 0;
    
    // 如果有交易记录，计算基于价格变化的收益
    if (stockData.length > 1 && trades.length > 0) {
      // 按日期排序股票数据
      const sortedStockData = [...stockData].sort((a, b) =>
        new Date(a.d).getTime() - new Date(b.d).getTime()
      );
      
      // 按日期排序交易记录
      const sortedTrades = [...trades].sort((a, b) =>
        new Date(a.date).getTime() - new Date(b.date).getTime()
      );
      
      // 计算每日收益（答题卡方式：基于价格变化百分比）
      // 这里需要根据用户的买卖决策来计算
      let isHolding = false; // 是否持股
      
      for (let i = 1; i < sortedStockData.length; i++) {
        const prevDate = sortedStockData[i - 1].d;
        const currentDate = sortedStockData[i].d;
        const prevPrice = parseFloat(sortedStockData[i - 1].c);
        const currentPrice = parseFloat(sortedStockData[i].c);
        
        // 检查该日期是否有交易
        const dateTrades = sortedTrades.filter(trade => trade.date === prevDate);
        
        // 处理该日期的交易
        dateTrades.forEach(trade => {
          if (trade.type === 'BUY') {
            isHolding = true;
          } else if (trade.type === 'SELL') {
            isHolding = false;
          }
        });
        
        // 如果持股，计算当日收益（答题卡方式：基于连续两天的价格变化）
        if (isHolding) {
          const dailyChange = ((currentPrice - prevPrice) / prevPrice);
          totalProfit += dailyChange;
        }
      }
    }
    
    // 获取当日行情数据
    // 如果没有指定currentDate，则使用最新一天的数据
    const currentStockData = currentDate ?
      stockData.find((data: StockData) => data.d === currentDate) :
      stockData.length > 0 ? stockData[stockData.length - 1] : undefined;

    const dailyStats = currentStockData ? {
      date: currentStockData.d, // 添加日期
      open: parseFloat(currentStockData.o),
      high: parseFloat(currentStockData.h),
      close: parseFloat(currentStockData.c),
      low: parseFloat(currentStockData.l),
      change: parseFloat(currentStockData.zd), // 改为使用涨跌幅百分比
    } : {
      date: '', // 添加日期
      open: 0,
      high: 0,
      close: 0,
      low: 0,
      change: 0,
    };

    return {
      totalProfit,
      dailyStats,
    };
  }, [dailyProfits, currentDate, stockData, trades]);
  // 更新当前日期
  const updateCurrentDate = useCallback((date: string) => {
    setCurrentDate(date);
  }, []);

  return {
    dailyProfits,
    profitSummary,
    updateCurrentDate,
  };
} 