import { NaverRealEstate } from "../services/naver.service";
import { prisma } from "../../lib/prisma";

async function main() {
  const realtorId = "a7062525";

  const naver = new NaverRealEstate({
    realtorId: realtorId,
  });

  try {
    console.log("활성 매물 목록 가져오는 중...");

    // DB에서 isActive가 true이고 realtorId가 일치하는 매물 가져오기
    const activeArticles = await prisma.realEstateArticle.findMany({
      where: {
        isActive: true,
        realtorId: realtorId,
      },
      select: {
        articleNumber: true,
      },
    });

    console.log(`총 ${activeArticles.length}개의 활성 매물 발견`);

    if (activeArticles.length === 0) {
      console.log("처리할 매물이 없습니다.");
      return;
    }

    // 각 매물의 상세 정보 가져오기
    let successCount = 0;
    let failCount = 0;

    for (let i = 0; i < activeArticles.length; i++) {
      const article = activeArticles[i];
      if (!article) {
        continue;
      }
      console.log(
        `\n[${i + 1}/${activeArticles.length}] ${
          article.articleNumber
        } 처리 중...`
      );

      try {
        // 상세 정보 HTML 가져오기 (프록시 사용)
        const detailHtml = await naver.getArticleDetailWithProxy(
          article.articleNumber
        );

        // HTML에서 JSON 데이터 추출
        const detailData = naver.parseArticleDetailFromHtml(detailHtml);

        if (detailData) {
          // DB에 상세 정보 저장
          await naver.saveArticleDetailToDB(article.articleNumber, detailData);
          successCount++;
          console.log(`✅ 저장 완료`);
        } else {
          failCount++;
          console.log(`❌ 데이터 파싱 실패`);
        }

        // 요청 간격 (1~2초 랜덤)
        const waitTime = 1000 + Math.floor(Math.random() * 1000);
        console.log(`${waitTime}ms 대기...`);
        await new Promise((resolve) => setTimeout(resolve, waitTime));
      } catch (error) {
        failCount++;
        console.error(`❌ 오류 발생:`, error);

        // 오류 발생 시 더 긴 대기
        await new Promise((resolve) => setTimeout(resolve, 3000));
      }
    }

    console.log("\n=== 처리 완료 ===");
    console.log(`성공: ${successCount}개`);
    console.log(`실패: ${failCount}개`);
  } catch (error) {
    console.error("오류 발생:", error);
  }
}

// 실행
main();
