from pybit.unified_trading import HTTP

import sys
import os
# 모듈 경로 추가
sys.path.append(os.path.abspath('M:/WORK_PYTHON/CySDK_PYTHON'))

from CyTypeDef import KlineInterval
from CyUtilTime import cy_utc_datetime_to_epoch_ms
from CyUtilPybit import cy_get_kline
from CyUtilFile import cy_save_to_csv_bybitcandleheader, cy_generate_csv_filename_bybit,cy_delete_existing_file

def main():
    global session
    session = HTTP(testnet=False)

    # 데이터 요청할 심볼 및 시간 간격 지정
    category = "spot"
    symbol = "BTCUSDT"
    interval = KlineInterval.M5

    # 시간 범위 설정
    utc_datetime_start_str = "2024.08.01_00.00.00"
    utc_datetime_end_str = "2024.08.21_00.00.00"

    start_ms = cy_utc_datetime_to_epoch_ms(utc_datetime_start_str)
    end_ms = cy_utc_datetime_to_epoch_ms(utc_datetime_end_str)

    total_number_of_candle_mustbe = 1 + (end_ms - start_ms) // interval.to_milliseconds()

    # CSV 파일명 생성
    csv_file = cy_generate_csv_filename_bybit(category, symbol, interval, utc_datetime_start_str, utc_datetime_end_str)
    cy_delete_existing_file(csv_file)

    first_write = True
    total_number_of_candle_acquired = 0

    while True:
        try:
            candle_list = cy_get_kline(session,category, symbol, interval, start_ms, end_ms)
        except Exception as e:
            print(f"Stop Processing. {str(e)}")
            break

        if not candle_list:
            print("Complete Candle Acquisition. the number of candle 0")
            break

        total_number_of_candle_acquired += len(candle_list)

        print(f"First candle: {candle_list[0]}")
        print(f"Last candle: {candle_list[-1]}")

        cy_save_to_csv_bybitcandleheader(csv_file, candle_list, first_write)

        first_write = False

        oldest_candle_epoch_ms = int(candle_list[-1][0])
        end_ms = oldest_candle_epoch_ms - interval.to_milliseconds()

        if end_ms < start_ms:
            print("Completed Candle Acquisition")
            print(f"Total number of acquired candles = {total_number_of_candle_acquired}")
            print(f"The number of candle must be {total_number_of_candle_mustbe}")
            print(f"The missing number of candle = {total_number_of_candle_mustbe - total_number_of_candle_acquired}")
            break

if __name__ == "__main__":
    main()