
import { useCallback, useEffect } from 'react';
import { Transaction } from '@/components/TransactionCard';
import { FilteringProps } from './types';
import { MONTHS_KR } from '../dateUtils';

/**
 * 거래 필터링 로직
 * 선택된 월과 검색어를 기준으로 거래를 필터링합니다.
 */
export const useFilterApplication = ({ 
  transactions, 
  selectedMonth, 
  searchQuery, 
  setFilteredTransactions 
}: Pick<FilteringProps, 'transactions' | 'selectedMonth' | 'searchQuery' | 'setFilteredTransactions'>) => {
  
  // 거래 필터링 함수
  const filterTransactions = useCallback(() => {
    try {
      console.log('필터링 시작, 전체 트랜잭션:', transactions.length);
      console.log('선택된 월:', selectedMonth);
      
      // 선택된 월 정보 파싱
      const selectedMonthName = selectedMonth;
      const monthNumber = MONTHS_KR.findIndex(month => month === selectedMonthName) + 1;
      
      // 월별 필터링
      let filtered = transactions.filter(transaction => {
        if (!transaction.date) return false;
        
        console.log(`트랜잭션 날짜 확인: "${transaction.date}", 타입: ${typeof transaction.date}`);
        
        // 다양한 날짜 형식 처리
        if (transaction.date.includes(selectedMonthName)) {
          return true; // 선택된 월 이름이 포함된 경우
        }
        
        if (transaction.date.includes('오늘')) {
          // 오늘 날짜가 해당 월인지 확인
          const today = new Date();
          const currentMonth = today.getMonth() + 1; // 0부터 시작하므로 +1
          return currentMonth === monthNumber;
        }
        
        // 다른 형식의 날짜도 시도
        try {
          // ISO 형식이 아닌 경우 처리
          if (transaction.date.includes('년') || transaction.date.includes('월')) {
            return transaction.date.includes(selectedMonthName);
          }
          
          // 표준 날짜 문자열 처리 시도
          const date = new Date(transaction.date);
          if (!isNaN(date.getTime())) {
            const transactionMonth = date.getMonth() + 1;
            return transactionMonth === monthNumber;
          }
        } catch (e) {
          console.error('날짜 파싱 오류:', e);
        }
        
        // 기본적으로 모든 트랜잭션 포함
        return true;
      });
      
      console.log(`월별 필터링 결과: ${filtered.length} 트랜잭션`);

      // 검색어에 따른 필터링
      if (searchQuery.trim()) {
        const searchLower = searchQuery.toLowerCase();
        filtered = filtered.filter(transaction => 
          transaction.title.toLowerCase().includes(searchLower) || 
          transaction.category.toLowerCase().includes(searchLower) ||
          transaction.amount.toString().includes(searchQuery)
        );
        console.log(`검색어 필터링 결과: ${filtered.length} 트랜잭션`);
      }
      
      // 결과 설정
      setFilteredTransactions(filtered);
      console.log('최종 필터링 결과:', filtered);
    } catch (error) {
      console.error('거래 필터링 중 오류:', error);
      setFilteredTransactions([]);
    }
  }, [transactions, selectedMonth, searchQuery, setFilteredTransactions]);

  // 필터링 트리거
  useEffect(() => {
    filterTransactions();
  }, [transactions, selectedMonth, searchQuery, filterTransactions]);

  return {
    filterTransactions
  };
};
