from datetime import datetime, timedelta
import time
from scraper import fetch_lottery_by_date
from db import execute_query

def run_historical_import(days_to_back=365):
    """
    ទាញយកទិន្នន័យឆ្នោតប្រវត្តិចាស់ៗថយក្រោយតាមចំនួនថ្ងៃ (Default: 365 ថ្ងៃ)
    និង រក្សាទុកចូល Table 'lottery_results' ស្វ័យប្រវត្តិ
    """
    today = datetime.now()
    print(f"==================================================")
    print(f"🚀 [FETCH HISTORY] ចាប់ផ្តើមទាញយកទិន្នន័យថយក្រោយ {days_to_back} ថ្ងៃ")
    print(f"📅 ថ្ងៃចាប់ផ្តើម (ថ្ងៃនេះ): {today.strftime('%Y-%m-%d')}")
    print(f"==================================================\n")

    total_inserted = 0
    total_skipped = 0
    total_failed_days = 0

    for i in range(days_to_back):
        # គណនាកាលបរិច្ឆេទថយក្រោយ
        target_date = (today - timedelta(days=i)).strftime('%Y-%m-%d')
        print(f"🔄 [{i+1}/{days_to_back}] កំពុងទាញយកទិន្នន័យថ្ងៃទី: {target_date} ...")

        # ហៅ Scraping Function តាមថ្ងៃ
        day_results = fetch_lottery_by_date(target_date)

        if not day_results:
            print(f"  └─ ⚠️ មិនទទួលបានទិន្នន័យសម្រាប់ថ្ងៃទី {target_date} ទេ (ឬ Web គ្មាន Data)")
            total_failed_days += 1
            continue

        day_inserted = 0
        day_skipped = 0

        for item in day_results:
            draw_date = item.get('draw_date', target_date)
            draw_time = item['draw_time']
            prize_a = item['prize_a']
            prize_b = item['prize_b']
            prize_c = item['prize_c']
            prize_d = item['prize_d']

            # ១. ពិនិត្យការពារការ Insert ទិន្នន័យស្ទួនក្នុង Database
            check_query = """
                SELECT id FROM lottery_results 
                WHERE draw_date = %s AND draw_time = %s
            """
            existing = execute_query(check_query, (draw_date, draw_time), fetch_one=True)

            if not existing:
                # ២. បញ្ចូល Data ថ្មីចូល DB
                insert_query = """
                    INSERT INTO lottery_results (draw_date, draw_time, prize_a, prize_b, prize_c, prize_d)
                    VALUES (%s, %s, %s, %s, %s, %s)
                """
                execute_query(
                    insert_query, 
                    (draw_date, draw_time, prize_a, prize_b, prize_c, prize_d), 
                    commit=True
                )
                day_inserted += 1
                total_inserted += 1
            else:
                day_skipped += 1
                total_skipped += 1

        print(f"  └─ 📊 ថ្ងៃទី {target_date}: បញ្ចូលថ្មី = {day_inserted} | មានស្រាប់ = {day_skipped}")

        # ពន្យារពេល 0.5 វិនាទី ដើម្បីកុំឱ្យ Server ដើម Block IP
        time.sleep(0.5)

    print(f"\n==================================================")
    print(f"🎉 [បញ្ចប់ការងារ] ទាញយកទិន្នន័យប្រវត្តិរួចរាល់ស្ថាពរ!")
    print(f"✅ បញ្ចូលថ្មីសរុប: {total_inserted} ជួរដេក")
    print(f"ℹ️ រំលង (មានក្នុង DB រួច): {total_skipped} ជួរដេក")
    print(f"⚠️ ថ្ងៃដែលគ្មាន Data: {total_failed_days} ថ្ងៃ")
    print(f"==================================================")

if __name__ == "__main__":
    # កំណត់ចំនួនថ្ងៃដែលចង់ទាញថយក្រោយ (ឧទាហរណ៍ 365 ថ្ងៃ)
    # សម្រាប់តេស្តដំបូង លោកអ្នកអាចដូរមកត្រឹម 7 ឬ 30 ថ្ងៃសិនបាន
    run_historical_import(days_to_back=3)