import time
import requests
import undetected_chromedriver as uc
from datetime import datetime
from flask import Flask, request, jsonify

from crawlers import alter, hankyung, naver_verifier

app = Flask(__name__)

DOMAIN = "http://estate.hongheemarketing.com/actions"
API_KEY = "estate2026"

def single_test_run():
    print("🤖 [테스트 모드] 스케줄러 무시하고 즉시 1회 가동 시작!")
    total_start_time = time.time()
    
    try:
        config_response = requests.get(f"{DOMAIN}/api_get_config.php?key={API_KEY}")
        
        if config_response.status_code != 200:
            print("❌ 설정 API 통신 에러")
            return
            
        data = config_response.json()
        users = data.get('users', [])
        
        for user in users:
            u_id = user['user_id']
            n_id = user['naver_id']
            
            print(f"\n==================================================")
            print(f"🚀 [유저 {u_id}] (네이버ID: {n_id}) 통합 크롤링 테스트 시작...")
            print(f"==================================================")
            
            all_collected_items = []

            if user.get('alter_id') and user.get('alter_pw'):
                print(f"[알터] 봇 출동 지시 (ID: {user['alter_id']})")
                alter_items = alter.crawl(user['alter_id'], user['alter_pw'])
                all_collected_items.extend(alter_items)

            if user.get('hk_id') and user.get('hk_pw'):
                print(f"[한경] 봇 출동 지시 (ID: {user['hk_id']})")
                hk_items = hankyung.crawl(user['hk_id'], user['hk_pw'])
                all_collected_items.extend(hk_items)
                
            if all_collected_items:
                print(f"\n💡 [매니저] 수집된 {len(all_collected_items)}개 매물의 네이버 순위를 매깁니다.")
                
                enriched_items = naver_verifier.verify_list(all_collected_items, n_id)

                ranked_count = len([i for i in enriched_items if i.get('rank_no', 0) > 0])
                print(f"\n📊 [최종 점검] 순위가 매겨진 매물 수: {ranked_count} / 전체 매물: {len(enriched_items)}")
                
                payload = {
                    "key": API_KEY,
                    "user_id": u_id,
                    "items": enriched_items,
                    "update_time": False
                }
                
                print("📡 DB 서버로 데이터 전송 중...")
                response = requests.post(f"{DOMAIN}/api_save_data.php", json=payload)
                
                # if response.status_code == 200:
                #     print(f"\n🔍 [재등록 검사] 목표 순위 밖으로 밀려난 매물을 찾습니다...")
                    
                #     target_response = requests.get(f"{DOMAIN}/api_get_refresh_targets.php?key={API_KEY}&user_id={u_id}")
                    
                #     if target_response.status_code == 200:
                #         targets = target_response.json().get('targets', [])
                        
                #         if targets:
                #             print(f"🎯 총 {len(targets)}개의 매물이 재등록 대상입니다. 플랫폼별로 분류합니다.")
                            
                #             alter_targets = [t for t in targets if t['platform'] == 'alter']
                #             hk_targets = [t for t in targets if t['platform'] == 'hankyung']
                            
                #             refresh_options = uc.ChromeOptions()
                #             refresh_options.add_argument('--window-size=1920,1080')
                #             refresh_options.add_argument('--log-level=3')
                #             refresh_driver = uc.Chrome(options=refresh_options, version_main=147)
                            
                #             if alter_targets and user.get('alter_id'):
                #                 print(f"\n[알터] {len(alter_targets)}개 매물 끌어올리기를 시작합니다.")
                #                 if alter.login(refresh_driver, user['alter_id'], user['alter_pw']):
                #                     for target in alter_targets:
                #                         success = alter.refresh_listing(refresh_driver, target['article_id'], target['naver_id'])
                #                         if success:
                #                             requests.post(f"{DOMAIN}/api_update_rereg_count.php", json={"key": API_KEY, "item_id": target['id']})
                            
                #             if hk_targets and user.get('hankyung_id'):
                #                 print(f"\n[한경] {len(hk_targets)}개 매물 끌어올리기를 시작합니다.")
                #                 if hankyung.login(refresh_driver, user['hankyung_id'], user['hankyung_pw']):
                #                     for target in hk_targets:
                #                         success = hankyung.refresh_listing(refresh_driver, target['article_id'], target['naver_id'])
                #                         if success:
                #                             requests.post(f"{DOMAIN}/api_update_rereg_count.php", json={"key": API_KEY, "item_id": target['id']})
                            
                #             refresh_driver.quit()
                #         else:
                #             print("☀️ 모든 매물이 목표 순위 내에 있어 안정권입니다. 재등록을 생략합니다.")
                #     else:
                #         print("⚠️ 재등록 타겟 조회 API 통신 실패")
                # else:
                #     print(f"⚠️ DB 전송 실패: {response.text}")
            else:
                print("  ⚠️ 수집된 매물이 하나도 없습니다.")

    except Exception as e:
        print(f"🚨 테스트 런 에러 발생: {e}")
        
    elapsed_time = time.time() - total_start_time
    print(f"\n⏱️ 총 소요 시간: {elapsed_time:.2f}초")

if __name__ == '__main__':
    single_test_run()
    print("\n🏁 [테스트 모드] 모든 작업이 완료되어 프로그램을 종료합니다.")