
import { supabase } from '../client';

/**
 * 트랜잭션 테이블을 생성합니다.
 */
export const createTransactionsTable = async (): Promise<{ success: boolean; message: string }> => {
  try {
    const { error } = await supabase.rpc('execute_sql', { 
      sql_query: `
        CREATE TABLE IF NOT EXISTS transactions (
          id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
          user_id UUID REFERENCES auth.users(id) NOT NULL,
          title TEXT NOT NULL,
          amount NUMERIC NOT NULL,
          category TEXT NOT NULL,
          date TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
          type TEXT NOT NULL,
          notes TEXT,
          created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
          updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
        );
        
        -- Row Level Security 설정
        ALTER TABLE transactions ENABLE ROW LEVEL SECURITY;
        
        -- 사용자 정책 설정 (읽기)
        CREATE POLICY "사용자는 자신의 트랜잭션만 볼 수 있음" 
          ON transactions FOR SELECT 
          USING (auth.uid() = user_id);
          
        -- 사용자 정책 설정 (쓰기)
        CREATE POLICY "사용자는 자신의 트랜잭션만 추가할 수 있음" 
          ON transactions FOR INSERT 
          WITH CHECK (auth.uid() = user_id);
          
        -- 사용자 정책 설정 (업데이트)
        CREATE POLICY "사용자는 자신의 트랜잭션만 업데이트할 수 있음" 
          ON transactions FOR UPDATE 
          USING (auth.uid() = user_id);
          
        -- 사용자 정책 설정 (삭제)
        CREATE POLICY "사용자는 자신의 트랜잭션만 삭제할 수 있음" 
          ON transactions FOR DELETE 
          USING (auth.uid() = user_id);
      `
    });
    
    if (error) {
      console.error('transactions 테이블 생성 실패:', error);
      return { 
        success: false, 
        message: `transactions 테이블 생성 실패: ${error.message}`
      };
    }
    
    return {
      success: true,
      message: 'transactions 테이블 생성 성공'
    };
  } catch (error: any) {
    console.error('트랜잭션 테이블 생성 중 오류 발생:', error);
    return { 
      success: false, 
      message: `트랜잭션 테이블 생성 실패: ${error.message || '알 수 없는 오류'}` 
    };
  }
};

/**
 * 예산 테이블을 생성합니다.
 */
export const createBudgetsTable = async (): Promise<{ success: boolean; message: string }> => {
  try {
    const { error } = await supabase.rpc('execute_sql', { 
      sql_query: `
        CREATE TABLE IF NOT EXISTS budgets (
          id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
          user_id UUID REFERENCES auth.users(id) NOT NULL,
          month INTEGER NOT NULL,
          year INTEGER NOT NULL,
          total_budget NUMERIC NOT NULL DEFAULT 0,
          categories JSONB NOT NULL DEFAULT '{}',
          created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
          updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
          UNIQUE (user_id, month, year)
        );
        
        -- Row Level Security 설정
        ALTER TABLE budgets ENABLE ROW LEVEL SECURITY;
        
        -- 사용자 정책 설정 (읽기)
        CREATE POLICY "사용자는 자신의 예산만 볼 수 있음" 
          ON budgets FOR SELECT 
          USING (auth.uid() = user_id);
          
        -- 사용자 정책 설정 (쓰기)
        CREATE POLICY "사용자는 자신의 예산만 추가할 수 있음" 
          ON budgets FOR INSERT 
          WITH CHECK (auth.uid() = user_id);
          
        -- 사용자 정책 설정 (업데이트)
        CREATE POLICY "사용자는 자신의 예산만 업데이트할 수 있음" 
          ON budgets FOR UPDATE 
          USING (auth.uid() = user_id);
          
        -- 사용자 정책 설정 (삭제)
        CREATE POLICY "사용자는 자신의 예산만 삭제할 수 있음" 
          ON budgets FOR DELETE 
          USING (auth.uid() = user_id);
      `
    });
    
    if (error) {
      console.error('budgets 테이블 생성 실패:', error);
      return { 
        success: false, 
        message: `budgets 테이블 생성 실패: ${error.message}`
      };
    }
    
    return {
      success: true,
      message: 'budgets 테이블 생성 성공'
    };
  } catch (error: any) {
    console.error('예산 테이블 생성 중 오류 발생:', error);
    return { 
      success: false, 
      message: `예산 테이블 생성 실패: ${error.message || '알 수 없는 오류'}` 
    };
  }
};

/**
 * 테스트 테이블을 생성합니다.
 */
export const createTestsTable = async (): Promise<{ success: boolean; message: string }> => {
  try {
    const { error } = await supabase.rpc('execute_sql', { 
      sql_query: `
        CREATE TABLE IF NOT EXISTS _tests (
          id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
          test_name TEXT NOT NULL,
          created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
        );
        
        -- 모든 사용자가 접근 가능하도록 설정
        ALTER TABLE _tests ENABLE ROW LEVEL SECURITY;
        CREATE POLICY "모든 사용자가 테스트 테이블에 접근 가능" 
          ON _tests FOR SELECT 
          USING (true);
      `
    });
    
    if (error) {
      console.error('_tests 테이블 생성 실패:', error);
      return { 
        success: false, 
        message: `_tests 테이블 생성 실패: ${error.message}`
      };
    }
    
    return {
      success: true,
      message: '_tests 테이블 생성 성공'
    };
  } catch (error: any) {
    console.error('테스트 테이블 생성 중 오류 발생:', error);
    return { 
      success: false, 
      message: `테스트 테이블 생성 실패: ${error.message || '알 수 없는 오류'}` 
    };
  }
};
