package com.market.mapper;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.market.entity.Kline;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * K 线分表 Mapper（market 库，动态表名，SQL 见 FuturesKlineMapper.xml）
 */
@DS("market")
@Mapper
public interface FuturesKlineMapper {

    /** 按开始时间 + 周期查询，用于判断是否已存在 */
    Kline selectByBeginTime(@Param("tableName") String tableName,
                            @Param("beginTime") Long beginTime,
                            @Param("period") String period);

    /** 新增 K 线 */
    void insert(@Param("tableName") String tableName, @Param("k") Kline kline);

    /** 更新 K 线（按 beginTime + period 定位） */
    void update(@Param("tableName") String tableName, @Param("k") Kline kline);

    /** 查询时间范围内的 K 线历史，按 begin_time 升序 */
    List<Kline> selectByTimeRange(@Param("tableName") String tableName,
                                  @Param("period") String period,
                                  @Param("from") Long from,
                                  @Param("to") Long to);

    /** 批量查询已存在的 begin_time 集合（用于 sync upsert 判断） */
    List<Long> selectExistingBeginTimes(@Param("tableName") String tableName,
                                        @Param("period") String period,
                                        @Param("beginTimes") List<Long> beginTimes);

    /** 批量新增 */
    void batchInsert(@Param("tableName") String tableName,
                     @Param("list") List<Kline> list);

    /** 批量更新（按 begin_time + period 定位） */
    void batchUpdate(@Param("tableName") String tableName,
                     @Param("list") List<Kline> list);
}
