#
# Copyright (c) 2013-2022 Contributors to the Eclipse Foundation

#
# See the NOTICE file distributed with this work for additional information regarding copyright
# ownership. All rights reserved. This program and the accompanying materials are made available
# under the terms of the Apache License, Version 2.0 which accompanies this distribution and is
# available at http://www.apache.org/licenses/LICENSE-2.0.txt
# ===============================================================================================
from .statistic import Statistic
from .data_type.count_statistic import CountStatistic
from .field.bloom_filter_statistic import BloomFilterStatistic
from .field.bounding_box_statistic import BoundingBoxStatistic
from .field.count_min_sketch_statistic import CountMinSketchStatistic
from .field.fixed_bin_numeric_histogram_statistic import FixedBinNumericHistogramStatistic
from .field.hyper_log_log_statistic import HyperLogLogStatistic
from .field.numeric_histogram_statistic import NumericHistogramStatistic
from .field.numeric_mean_statistic import NumericMeanStatistic
from .field.numeric_range_statistic import NumericRangeStatistic
from .field.numeric_stats_statistic import NumericStatsStatistic
from .field.time_range_statistic import TimeRangeStatistic
from .index.differing_visibility_count_statistic import DifferingVisibilityCountStatistic
from .index.duplicate_entry_count_statistic import DuplicateEntryCountStatistic
from .index.field_visibility_count_statistic import FieldVisibilityCountStatistic
from .index.index_meta_data_set_statistic import IndexMetaDataSetStatistic
from .index.max_duplicates_statistic import MaxDuplicatesStatistic
from .index.partitions_statistic import PartitionsStatistic
from .index.row_range_histogram_statistic import RowRangeHistogramStatistic


__statistic_mappings = {
    CountStatistic.STATS_TYPE.get_string(): CountStatistic,
    BloomFilterStatistic.STATS_TYPE.get_string(): BloomFilterStatistic,
    BoundingBoxStatistic.STATS_TYPE.get_string(): BoundingBoxStatistic,
    CountMinSketchStatistic.STATS_TYPE.get_string(): CountMinSketchStatistic,
    FixedBinNumericHistogramStatistic.STATS_TYPE.get_string(): FixedBinNumericHistogramStatistic,
    HyperLogLogStatistic.STATS_TYPE.get_string(): HyperLogLogStatistic,
    NumericHistogramStatistic.STATS_TYPE.get_string(): NumericHistogramStatistic,
    NumericMeanStatistic.STATS_TYPE.get_string(): NumericMeanStatistic,
    NumericRangeStatistic.STATS_TYPE.get_string(): NumericRangeStatistic,
    NumericStatsStatistic.STATS_TYPE.get_string(): NumericStatsStatistic,
    TimeRangeStatistic.STATS_TYPE.get_string(): TimeRangeStatistic,
    DifferingVisibilityCountStatistic.STATS_TYPE.get_string(): DifferingVisibilityCountStatistic,
    DuplicateEntryCountStatistic.STATS_TYPE.get_string(): DuplicateEntryCountStatistic,
    FieldVisibilityCountStatistic.STATS_TYPE.get_string(): FieldVisibilityCountStatistic,
    IndexMetaDataSetStatistic.STATS_TYPE.get_string(): IndexMetaDataSetStatistic,
    MaxDuplicatesStatistic.STATS_TYPE.get_string(): MaxDuplicatesStatistic,
    PartitionsStatistic.STATS_TYPE.get_string(): PartitionsStatistic,
    RowRangeHistogramStatistic.STATS_TYPE.get_string(): RowRangeHistogramStatistic,
}


def map_statistic(j_statistic):
    if j_statistic is None:
        return None
    stat_type = j_statistic.getStatisticType().getString()
    if stat_type in __statistic_mappings:
        return __statistic_mappings[stat_type](java_ref=j_statistic)
    return Statistic(j_statistic)
