import os
import sys

sys.path.append(os.path.dirname(sys.path[0]))

from utils.common_util import CommonUtil
from utils.secure_db_client import get_remote_engine
from datetime import datetime, timedelta

if __name__ == '__main__':
    site_name = CommonUtil.get_sys_arg(1, None)
    date_info = CommonUtil.get_sys_arg(2, None)
    assert site_name is not None, "site_name 不能为空！"
    assert date_info is not None, "date_info 不能为空！"

    # date_info = date.today().strftime("%Y-%m-%d")
    # last_date_info = (date.today() - timedelta(days=1)).strftime("%Y-%m-%d")
    last_date_info = (datetime.strptime(date_info, "%Y-%m-%d").date() - timedelta(days=1)).strftime("%Y-%m-%d")
    # 上限：程序运行当天 00:00:00（拉昨天及之前完整数据，今天还在写不拉）
    upper_bound = datetime.now().strftime("%Y-%m-%d") + " 00:00:00"

    db_type = 'postgresql_cluster'
    import_table = f"{site_name}_keepa_last_detail"
    hive_table = "ods_keepa_asin_detail"
    partition_dict = {
        "site_name": site_name,
        "date_info": date_info
    }
    hdfs_path = CommonUtil.build_hdfs_path(hive_table, partition_dict=partition_dict)

    engine = get_remote_engine(
        site_name=site_name,
        db_type=db_type
    )

    # 增量区间：[last_date_info, 程序运行时刻)
    # 下限：last_date_info（前一日），间隔几天补跑时传更早 date_info 自动覆盖区间
    # 上限：upper_bound（程序运行时刻），半开区间避免拉到 PG 正在写入的最新数据，且不固定为一天
    query = f"""
    SELECT asin, last_detail::text as last_detail, update_at FROM {import_table}
    WHERE update_at >= '{last_date_info}' AND update_at < '{upper_bound}' AND last_detail is not null AND \$CONDITIONS
    """

    engine.sqoop_raw_import(
        query=query,
        hive_table=hive_table,
        hdfs_path=hdfs_path,
        partitions=partition_dict,
        check_count=True
    )

    pass
