
import { useCallback } from 'react';
import { Transaction } from '@/components/TransactionCard';
import { useAuth } from '@/contexts/auth/useAuth';
import { toast } from '@/hooks/useToast.wrapper';
import { saveTransactionsToStorage } from '../storageUtils';
import { updateTransactionInSupabase } from '../supabaseUtils';
import { TransactionOperationProps } from './types';
import { normalizeDate } from '@/utils/sync/transaction/dateUtils';

/**
 * 트랜잭션 업데이트 기능
 * 로컬 스토리지와 Supabase에 트랜잭션을 업데이트합니다.
 */
export const useUpdateTransaction = (
  transactions: Transaction[],
  setTransactions: React.Dispatch<React.SetStateAction<Transaction[]>>
) => {
  const { user } = useAuth();

  return useCallback((updatedTransaction: Transaction) => {
    const updatedTransactions = transactions.map(transaction =>
      transaction.id === updatedTransaction.id ? updatedTransaction : transaction
    );
    
    // 로컬 스토리지 업데이트
    saveTransactionsToStorage(updatedTransactions);
    
    // 상태 업데이트
    setTransactions(updatedTransactions);
    
    // Supabase 업데이트 시도 (날짜 형식 변환 추가)
    if (user) {
      // ISO 형식으로 날짜 변환
      const transactionWithIsoDate = {
        ...updatedTransaction,
        dateForSync: normalizeDate(updatedTransaction.date)
      };
      
      updateTransactionInSupabase(user, transactionWithIsoDate);
    }
    
    // 이벤트 발생
    window.dispatchEvent(new Event('transactionUpdated'));
    
    // 약간의 지연을 두고 토스트 표시
    setTimeout(() => {
      toast({
        title: "지출이 수정되었습니다",
        description: `${updatedTransaction.title} 항목이 업데이트되었습니다.`,
        duration: 3000
      });
    }, 100);
  }, [transactions, setTransactions, user]);
};
