// Copyright 2020 TiKV Project Authors. Licensed under Apache-2.0.
// Modifications Copyright 2024 PingCAP, Inc.

use online_config::OnlineConfig;
use serde::{Deserialize, Serialize};
use tikv_util::config::ReadableDuration;

#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, OnlineConfig)]
#[serde(default)]
#[serde(rename_all = "kebab-case")]
pub struct Config {
    pub max_batch_size: Option<usize>,
    pub pool_size: usize,
    #[online_config(skip)]
    pub reschedule_duration: ReadableDuration,
}

impl Config {
    pub fn max_batch_size(&self) -> usize {
        // Some callers (including tests) may use Config without prior
        // validation/normalization, leaving `max_batch_size` as None.
        // In that case, fall back to the default of 1024.
        self.max_batch_size.unwrap_or(1024)
    }
}

impl Default for Config {
    fn default() -> Config {
        Config {
            max_batch_size: None,
            pool_size: 2,
            reschedule_duration: ReadableDuration::secs(5),
        }
    }
}
