const { PrismaClient } = require("@prisma/client");

const prisma = new PrismaClient();

async function addMissingColumns() {
  try {
    console.log("🔄 누락된 컬럼들을 screen_layouts 테이블에 추가 중...");

    // layout_type 컬럼 추가
    try {
      await prisma.$executeRaw`
        ALTER TABLE screen_layouts 
        ADD COLUMN IF NOT EXISTS layout_type VARCHAR(50);
      `;
      console.log("✅ layout_type 컬럼 추가 완료");
    } catch (error) {
      console.log(
        "ℹ️ layout_type 컬럼이 이미 존재하거나 추가 중 오류:",
        error.message
      );
    }

    // layout_config 컬럼 추가
    try {
      await prisma.$executeRaw`
        ALTER TABLE screen_layouts 
        ADD COLUMN IF NOT EXISTS layout_config JSONB;
      `;
      console.log("✅ layout_config 컬럼 추가 완료");
    } catch (error) {
      console.log(
        "ℹ️ layout_config 컬럼이 이미 존재하거나 추가 중 오류:",
        error.message
      );
    }

    // zones_config 컬럼 추가
    try {
      await prisma.$executeRaw`
        ALTER TABLE screen_layouts 
        ADD COLUMN IF NOT EXISTS zones_config JSONB;
      `;
      console.log("✅ zones_config 컬럼 추가 완료");
    } catch (error) {
      console.log(
        "ℹ️ zones_config 컬럼이 이미 존재하거나 추가 중 오류:",
        error.message
      );
    }

    // zone_id 컬럼 추가
    try {
      await prisma.$executeRaw`
        ALTER TABLE screen_layouts 
        ADD COLUMN IF NOT EXISTS zone_id VARCHAR(100);
      `;
      console.log("✅ zone_id 컬럼 추가 완료");
    } catch (error) {
      console.log(
        "ℹ️ zone_id 컬럼이 이미 존재하거나 추가 중 오류:",
        error.message
      );
    }

    // 인덱스 생성 (성능 향상)
    try {
      await prisma.$executeRaw`
        CREATE INDEX IF NOT EXISTS idx_screen_layouts_layout_type 
        ON screen_layouts(layout_type);
      `;
      console.log("✅ layout_type 인덱스 생성 완료");
    } catch (error) {
      console.log("ℹ️ layout_type 인덱스 생성 중 오류:", error.message);
    }

    try {
      await prisma.$executeRaw`
        CREATE INDEX IF NOT EXISTS idx_screen_layouts_zone_id 
        ON screen_layouts(zone_id);
      `;
      console.log("✅ zone_id 인덱스 생성 완료");
    } catch (error) {
      console.log("ℹ️ zone_id 인덱스 생성 중 오류:", error.message);
    }

    // 최종 테이블 구조 확인
    const columns = await prisma.$queryRaw`
      SELECT column_name, data_type, is_nullable, column_default
      FROM information_schema.columns 
      WHERE table_name = 'screen_layouts' 
      ORDER BY ordinal_position
    `;

    console.log("\n📋 screen_layouts 테이블 최종 구조:");
    console.table(columns);

    console.log("\n🎉 모든 누락된 컬럼 추가 작업이 완료되었습니다!");
  } catch (error) {
    console.error("❌ 컬럼 추가 중 오류 발생:", error);
  } finally {
    await prisma.$disconnect();
  }
}

addMissingColumns();
