package com.lanyuanxiaoyao.service.forest.service;

import com.dtflys.forest.annotation.*;
import com.lanyuanxiaoyao.service.common.entity.FlinkJob;
import com.lanyuanxiaoyao.service.common.entity.SyncState;
import com.lanyuanxiaoyao.service.common.entity.TableMeta;
import com.lanyuanxiaoyao.service.configuration.entity.PageResponse;
import com.lanyuanxiaoyao.service.configuration.entity.info.*;
import java.util.Map;
import org.eclipse.collections.api.list.ImmutableList;

/**
 * Info 接口
 *
 * @author lanyuanxiaoyao
 * @date 2023-04-24
 */
@BaseRequest(baseURL = "http://service-info-query")
public interface InfoService {
    @Get("/logs")
    ImmutableList<SQLLine> sqlLogs();

    @Get("/info/table_count")
    Long tableCount();

    @Get("/info/table_focus_count")
    Long tableFocusCount();

    @Get("/info/hudi_count")
    Long hudiCount();

    @Get("/info/hudi_focus_count")
    Long hudiFocusCount();

    @Get("/info/hive_count")
    Long hiveCount();

    @Get("/info/hive_focus_count")
    Long hiveFocusCount();

    @Get("/info/un_receive_version_normal_table")
    ImmutableList<JobIdAndAlias> unReceiveVersionNormalTable(@Query("version") String version);

    @Get("/info/un_receive_version_normal_table_count")
    Long unReceiveVersionNormalTableCount(@Query("version") String version);

    @Get("/info/un_receive_version_focus_table")
    ImmutableList<JobIdAndAlias> unReceiveVersionFocusTable(@Query("version") String version);

    @Get("/info/un_receive_version_focus_table_count")
    Long unReceiveVersionFocusTableCount(@Query("version") String version);

    @Get("/info/un_scheduled_normal_table")
    ImmutableList<JobIdAndAlias> unScheduledNormalTable(@Query("version") String version);

    @Get("/info/un_scheduled_normal_table_count")
    Long unScheduledNormalTableCount(@Query("version") String version);

    @Get("/info/un_scheduled_focus_table")
    ImmutableList<JobIdAndAlias> unScheduledFocusTable(@Query("version") String version);

    @Get("/info/un_scheduled_focus_table_count")
    Long unScheduledFocusTableCount(@Query("version") String version);

    @Get("/info/job_id_alias")
    PageResponse<JobIdAndAlias> jobIdAndAlias(@Query Map<String, Object> queryMap);

    @Get("/info/version_tables")
    PageResponse<VersionUpdated> versionTables(@Query Map<String, Object> queryMap);

    @Get("/info/compaction_metrics")
    PageResponse<CompactionMetrics> compactionMetrics(@Query Map<String, Object> queryMap);

    @Get("/info/job_metas")
    ImmutableList<JobAndMetas> jobAndMetas();

    @Get("/info/flink_job/list")
    ImmutableList<FlinkJob> flinkJobList();

    @Get("/info/flink_job/detail")
    FlinkJob flinkJobDetail(@Query("flink_job_id") Long flinkJobId);

    @Get("/info/flink_job/save")
    void saveFlinkJob(@Query("id") Long id, @Query("name") String name, @Query("run_mode") String runMode);

    @Get("/info/table_meta/list")
    ImmutableList<TableMeta> tableMetaList();

    @Get("/info/table_meta/list")
    ImmutableList<TableMeta> tableMetaList(@Query("flink_job_id") Long flinkJobId);

    @Get("/info/table_meta/detail")
    TableMeta tableMetaDetail(@Query("flink_job_id") Long flinkJobId, @Query("alias") String alias);

    @Get("/info/disable_table")
    void disableTable(@Query("flink_job_id") Long flinkJobId, @Query("alias") String alias);

    @Post("/info/table_meta/save")
    void saveTableMeta(@JSONBody TableMetaAdd addon);

    @Get("/info/sync_state/detail")
    SyncState syncStateDetail(@Query("flink_job_id") Long flinkJobId, @Query("alias") String alias);

    @Get("/info/sync_state/save_compaction_id")
    void saveCompactionId(@Query("flink_job_id") Long flinkJobId, @Query("alias") String alias, @Query("application_id") String applicationId);

    @Get("/info/non_updated_version_tables")
    ImmutableList<String> nonUpdatedVersionTables();

    @Get("/info/updated_version_tables")
    ImmutableList<String> updatedVersionTables();

    @Get("/info/exists_table")
    Boolean existsTable(@Query("flink_job_id") Long flinkJobId, @Query("alias") String alias);

    @Get("/info/non_exists_table")
    Boolean nonExistsTable(@Query("flink_job_id") Long flinkJobId, @Query("alias") String alias);

    @Get("/info/exists_table_by_hdfs")
    Boolean existsTableByHdfs(@Query("hdfs") String hdfs);

    @Get("/info/non_exists_table_by_hdfs")
    Boolean nonExistsTableByHdfs(@Query("hdfs") String hdfs);

    @Get("/info/all_flink_job_id_and_alias")
    ImmutableList<JobIdAndAlias> allFlinkJobIdAndAlias();

    @Get("/info/all_flink_job_id")
    ImmutableList<Long> allFlinkJobId();

    @Get("/info/all_flink_job_id")
    ImmutableList<Long> allFlinkJobId(@Query("key") String key);

    @Get("/info/all_flink_job_id")
    ImmutableList<Long> allFlinkJobId(@Query("key") String key, @Query("alias") String alias);

    @Get("/info/all_flink_job_id")
    ImmutableList<Long> allFlinkJobIdByAlias(@Query("alias") String alias);

    @Get("/info/all_alias")
    ImmutableList<String> allAlias();

    @Get("/info/all_alias")
    ImmutableList<String> allAlias(@Query("key") String key);

    @Get("/info/all_alias")
    ImmutableList<String> allAlias(@Query("key") String key, @Query("flink_job_id") String flinkJobId);

    @Get("/info/all_alias")
    ImmutableList<String> allAliasByFlinkJobId(@Query("flink_job_id") String flinkJobId);

    @Get("/info/all_hdfs")
    ImmutableList<String> allHdfs();

    @Get("/info/all_hdfs")
    ImmutableList<String> allHdfs(@Query("key") String key);

    @Get("/info/all_pulsar")
    ImmutableList<String> allPulsar();

    @Get("/info/all_pulsar")
    ImmutableList<String> allPulsar(@Query("key") String key);

    @Get("/info/all_pulsar_topic")
    ImmutableList<String> allPulsarTopic();

    @Get("/info/all_pulsar_topic")
    ImmutableList<String> allPulsarTopic(@Query("key") String key);

    @Get("/info/simple_table_metas")
    ImmutableList<SimpleTableMeta> simpleTableMetas();

    @Get("/info/simple_table_metas")
    ImmutableList<SimpleTableMeta> simpleTableMetas(@Query("flink_job_id") Long flinkJobId);

    @Get("/info/simple_table_metas")
    ImmutableList<SimpleTableMeta> simpleTableMetas(@Query("alias") String alias);

    @Get("/info/simple_table_metas")
    ImmutableList<SimpleTableMeta> simpleTableMetas(@Query("flink_job_id") Long flinkJobId, @Query("alias") String alias);
}
