import logging
import os
import sqlite3
import sys

# Thêm thư mục backend vào sys.path để có thể import được common, config
backend_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if backend_dir not in sys.path:
    sys.path.insert(0, backend_dir)

from common.constants import SQLITE_DB_PATH
from common.starrocks_connection import get_db_connection

logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
logger = logging.getLogger(__name__)

def migrate_similar_items():
    logger.info("Đang kết nối tới StarRocks...")
    sr_db = get_db_connection()

    query = """
    SELECT magento_ref_code, similar_items 
    FROM test_db.magento_product_dimension_with_text_embedding
    WHERE similar_items IS NOT NULL AND similar_items != ''
    """

    logger.info("Đang tải dữ liệu similar_items từ StarRocks...")
    rows = sr_db.execute_query(query)

    if not rows:
        logger.warning("Không tìm thấy dữ liệu similar_items nào trong StarRocks!")
        return

    logger.info(f"Đã tải {len(rows)} sản phẩm có similar_items từ StarRocks. Chuẩn bị migrate vào SQLite...")

    logger.info(f"Đang kết nối tới SQLite: {SQLITE_DB_PATH}")
    if not os.path.exists(SQLITE_DB_PATH):
        logger.error(f"Không tìm thấy file SQLite tại {SQLITE_DB_PATH}")
        return

    conn = sqlite3.connect(SQLITE_DB_PATH)
    cursor = conn.cursor()

    update_count = 0

    cursor.execute("BEGIN TRANSACTION")
    try:
        for row in rows:
            ref_code = row['magento_ref_code']
            similar_items = row['similar_items']

            # CẬP NHẬT TRỰC TIẾP, KHÔNG PARSE, KHÔNG LÀM GÌ CẢ
            cursor.execute(
                """
                UPDATE sr__test_db__magento_product_dimension_with_text_embedding 
                SET similar_items = ? 
                WHERE magento_ref_code = ?
                """,
                (similar_items, ref_code)
            )
            update_count += cursor.rowcount

        conn.commit()
        logger.info(f"✅ Migrate thành công! Đã copy trực tiếp {update_count} dòng sang SQLite.")
    except Exception as e:
        conn.rollback()
        logger.error(f"❌ Lỗi trong quá trình update SQLite: {e}")
    finally:
        conn.close()

if __name__ == "__main__":
    migrate_similar_items()
