
import { supabase } from '@/lib/supabase';

/**
 * 사용자의 모든 클라우드 데이터 초기화
 */
export const clearCloudData = async (userId: string): Promise<boolean> => {
  if (!userId) {
    console.error('사용자 ID가 없습니다.');
    return false;
  }
  
  console.log('클라우드 데이터 초기화 시작');
  
  try {
    // 모든 테이블에서 사용자 데이터 삭제
    const tablesToClear = ['transactions', 'category_budgets', 'budgets'];
    const results = await Promise.allSettled(
      tablesToClear.map(async (table) => {
        // 먼저 데이터가 있는지 확인
        const { data: checkData } = await supabase
          .from(table)
          .select('id')
          .eq('user_id', userId)
          .limit(1);
          
        // 데이터가 없으면 삭제를 건너뜀
        if (!checkData || checkData.length === 0) {
          console.log(`테이블 ${table}에 삭제할 데이터가 없습니다.`);
          return true;
        }
        
        // 데이터 삭제
        console.log(`테이블 ${table}에서 사용자 데이터 삭제 시도`);
        const { error } = await supabase
          .from(table)
          .delete()
          .eq('user_id', userId);
          
        if (error) {
          console.error(`테이블 ${table} 데이터 삭제 오류:`, error);
          return false;
        }
        
        console.log(`테이블 ${table} 데이터 삭제 성공`);
        return true;
      })
    );
    
    // 삭제 확인을 위해 다시 데이터 조회
    const verificationResults = await Promise.all(
      tablesToClear.map(async (table) => {
        const { data, error } = await supabase
          .from(table)
          .select('id')
          .eq('user_id', userId);
          
        if (error) {
          console.error(`테이블 ${table} 검증 오류:`, error);
          return false;
        }
        
        // 남아있는 데이터가 있는지 확인
        const isEmpty = !data || data.length === 0;
        console.log(`테이블 ${table} 검증 결과: ${isEmpty ? '비어있음' : `${data.length}개 항목 남아있음`}`);
        
        if (!isEmpty) {
          // 한 번 더 삭제 시도
          console.log(`테이블 ${table}에 데이터가 남아있어 다시 삭제 시도`);
          const { error: retryError } = await supabase
            .from(table)
            .delete()
            .eq('user_id', userId);
            
          if (retryError) {
            console.error(`테이블 ${table} 재삭제 오류:`, retryError);
            return false;
          }
        }
        
        return isEmpty;
      })
    );
    
    // 모든 테이블이 성공적으로 삭제되었는지 확인
    const allTablesCleared = verificationResults.every(result => result === true);
    
    console.log('클라우드 데이터 초기화 완료, 결과:', allTablesCleared ? '성공' : '일부 실패');
    return allTablesCleared;
  } catch (error) {
    console.error('클라우드 데이터 초기화 중 오류 발생:', error);
    return false;
  }
};
