package premium

import (
	pb "github.com/tidbcloud/config-center/proto/config_center"
	"github.com/tidbcloud/config-center/templategen"
)

// specSEM is the Security Enhanced Mode config, authored as JSON.
// SEM config v1.3, copied from https://pingcap.feishu.cn/wiki/GIeawZlRFizCBRkVDDFcQQRfnCc
var specSEM = templategen.Spec{
	ConfigType: pb.SHARED_POOL_CONFIG_TIDB_SEM,
	Name:       "system template of premium sem",
	Base: templategen.MustJSON(`{
  "version": "1.0",
  "tidb_version": "v8.5.0",
  "restricted_databases": [
    "metrics_schema"
  ],
  "restricted_tables": [
    {
      "schema": "information_schema",
      "name": "cluster_config",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "cluster_hardware",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "cluster_load",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "cluster_log",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "cluster_slow_query",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "cluster_systeminfo",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "inspection_result",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "inspection_rules",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "inspection_summary",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "metrics_summary",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "metrics_summary_by_label",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "metrics_tables",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "placement_policies",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "resource_groups",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "slow_query",
      "hidden": true
    },
    {
      "schema": "information_schema",
      "name": "tidb_hot_regions",
      "hidden": true
    },    
    {
      "schema": "mysql",
      "name": "tidb",
      "hidden": true
    },
    {
      "schema": "mysql",
      "name": "opt_rule_blacklist",
      "hidden": true
    },
    {
      "schema": "mysql",
      "name": "gc_delete_range",
      "hidden": true
    },
    {
      "schema": "mysql",
      "name": "gc_delete_range_done",
      "hidden": true
    },
    {
      "schema": "mysql",
      "name": "expr_pushdown_blacklist",
      "hidden": true
    },
    
    
    {
      "schema": "performance_schema",
      "name": "pd_profile_allocs",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "pd_profile_block",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "pd_profile_cpu",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "pd_profile_goroutines",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "pd_profile_memory",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "pd_profile_mutex",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "tidb_profile_allocs",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "tidb_profile_block",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "tidb_profile_cpu",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "tidb_profile_goroutines",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "tidb_profile_memory",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "tidb_profile_mutex",
      "hidden": true
    },
    {
      "schema": "performance_schema",
      "name": "tikv_profile_cpu",
      "hidden": true
    }
  ],
  "restricted_status_variables": [
    "tidb_gc_leader_desc"
  ],
  "restricted_variables": [
    {
      "name": "datadir",
      "value":"/usr/local/mysql/data/"
    },
    {
      "name": "hostname",
      "value": "localhost"
    },
    {
      "name": "ddl_slow_threshold",
      "readonly": true
    },
    {
      "name": "block_encryption_mode",
      "readonly": true
    },
    {
      "name": "max_connections",
      "readonly": true
    },
    {
      "name": "mpp_version",
      "readonly": true
    },
    {
      "name": "plugin_dir",
      "hidden": true
    },
    {
      "name": "plugin_load",
      "hidden": true
    },
    {
      "name": "require_secure_transport",
      "hidden": true
    },
    {
      "name": "skip_name_resolve",
      "readonly": true
    },
    {
      "name": "tidb_adaptive_closest_read_threshold",
      "hidden": true
    },
    {
      "name": "tidb_allow_batch_cop",
      "readonly": true
    },
    {
      "name": "tidb_allow_mpp",
      "readonly": true
    },
    {
      "name": "tidb_analyze_version",
      "readonly": true
    },
    {
      "name": "tidb_backoff_lock_fast",
      "readonly": true
    },
    {
      "name": "tidb_backoff_weight",
      "readonly": true
    },
    {
      "name": "tidb_batch_commit",
      "hidden": true
    },
    {
      "name": "tidb_batch_delete",
      "hidden": true
    },
    {
      "name": "tidb_batch_insert",
      "hidden": true
    },
    {
      "name": "tidb_capture_plan_baselines",
      "readonly": true
    },
    {
      "name": "tidb_check_mb4_value_in_utf8",
      "hidden": true
    },
    {
      "name": "tidb_config",
      "hidden": true
    },
    {
      "name": "tidb_constraint_check_in_place",
      "readonly": true
    },
    {
      "name": "tidb_constraint_check_in_place_pessimistic",
      "readonly": true
    },
    {
      "name": "tidb_cost_model_version",
      "readonly": true
    },
    {
      "name": "tidb_ddl_disk_quota",
      "readonly": true
    },
    {
      "name": "tidb_ddl_enable_fast_reorg",
      "readonly": true
    },
    {
      "name": "tidb_ddl_flashback_concurrency",
      "readonly": true
    },
    {
      "name": "tidb_enable_collect_execution_info",
      "hidden": true
    },
    {
      "name": "tidb_cloud_storage_uri",
      "hidden": true
    },
    {
      "name": "tidb_ddl_reorg_max_write_speed",
      "hidden": true
    },
    {
      "name": "tidb_disable_txn_auto_retry",
      "hidden": true
    },
    {
      "name": "tidb_dml_batch_size",
      "hidden": true
    },
    {
      "name": "tidb_dml_type",
      "hidden": true
    },
    {
      "name": "tidb_enable_analyze_snapshot",
      "readonly": true
    },
    {
      "name": "tidb_enable_async_merge_global_stats",
      "readonly": true
    },
    {
      "name": "tidb_enable_batch_dml",
      "hidden": true
    },
    {
      "name": "tidb_enable_chunk_rpc",
      "readonly": true
    },
    {
      "name": "tidb_enable_column_tracking",
      "hidden": true
    },
    {
      "name": "tidb_enable_ddl",
      "readonly": true
    },
    {
      "name": "tidb_enable_dist_task",
      "readonly": true
    },
    {
      "name": "tidb_enable_exchange_partition",
      "hidden": true
    },
    {
      "name": "tidb_enable_extended_stats",
      "readonly": true
    },
    {
      "name": "tidb_enable_fast_analyze",
      "hidden": true
    },
    {
      "name": "tidb_enable_gogc_tuner",
      "readonly": true
    },
    {
      "name": "tidb_enable_global_index",
      "hidden": true
    },
    {
      "name": "tidb_enable_historical_stats",
      "readonly": true
    },
    {
      "name": "tidb_enable_historical_stats_for_capture",
      "readonly": true
    },
    {
      "name": "tidb_enable_legacy_instance_scope",
      "readonly": true
    },
    {
      "name": "tidb_enable_list_partition",
      "hidden": true
    },
    {
      "name": "tidb_enable_local_txn",
      "readonly": true
    },
    {
      "name": "tidb_enable_metadata_lock",
      "readonly": true
    },
    {
      "name": "tidb_enable_mutation_checker",
      "readonly": true
    },
    {
      "name": "tidb_enable_new_cost_interface",
      "readonly": true
    },
    {
      "name": "tidb_enable_parallel_hashagg_spill",
      "readonly": true
    },
    {
      "name": "tidb_enable_plan_replayer_capture",
      "readonly": true
    },
    {
      "name": "tidb_enable_plan_replayer_continuous_capture",
      "readonly": true
    },
    {
      "name": "tidb_enable_point_get_cache",
      "hidden": true
    },
    {
      "name": "tidb_enable_rate_limit_action",
      "readonly": true
    },
    {
      "name": "tidb_enable_resource_control",
      "readonly": true
    },
    {
      "name": "tidb_enable_reuse_chunk",
      "readonly": true
    },
    {
      "name": "tidb_enable_slow_log",
      "hidden": true
    },
    {
      "name": "tidb_enable_stats_owner",
      "readonly": true
    },
    {
      "name": "tidb_enable_stmt_summary",
      "readonly": true
    },
    {
      "name": "tidb_enable_table_partition",
      "hidden": true
    },
    {
      "name": "tidb_enable_telemetry",
      "hidden": true
    },
    {
      "name": "tidb_enable_tiflash_read_for_write_stmt",
      "hidden": true
    },
    {
      "name": "tidb_enable_tmp_storage_on_oom",
      "hidden": true
    },
    {
      "name": "tidb_enable_top_sql",
      "readonly": true
    },
    {
      "name": "tidb_enable_vectorized_expression",
      "readonly": true
    },
    {
      "name": "tidb_evolve_plan_baselines",
      "hidden": true
    },
    {
      "name": "tidb_evolve_plan_task_end_time",
      "hidden": true
    },
    {
      "name": "tidb_evolve_plan_task_max_time",
      "hidden": true
    },
    {
      "name": "tidb_evolve_plan_task_start_time",
      "hidden": true
    },
    {
      "name": "tidb_expensive_query_time_threshold",
      "hidden": true
    },
    {
      "name": "tidb_force_priority",
      "hidden": true
    },
    {
      "name": "tidb_general_log",
      "hidden": true
    },
    {
      "name": "tidb_generate_binary_plan",
      "readonly": true
    },
    {
      "name": "tidb_guarantee_linearizability",
      "readonly": true
    },
    {
      "name": "tidb_hash_exchange_with_new_collation",
      "readonly": true
    },
    {
      "name": "tidb_historical_stats_duration",
      "hidden": true
    },
    {
      "name": "tidb_load_based_replica_read_threshold",
      "readonly": true
    },
    {
      "name": "tidb_lock_unchanged_keys",
      "readonly": true
    },
    {
      "name": "tidb_log_file_max_days",
      "readonly": true
    },
    {
      "name": "tidb_mem_oom_action",
      "readonly": true
    },
    {
      "name": "tidb_mem_quota_analyze",
      "readonly": true
    },
    {
      "name": "tidb_memory_debug_mode_alarm_ratio",
      "hidden": true
    },
    {
      "name": "tidb_memory_debug_mode_min_heap_inuse",
      "hidden": true
    },
    {
      "name": "tidb_memory_usage_alarm_keep_record_num",
      "readonly": true
    },
    {
      "name": "tidb_memory_usage_alarm_ratio",
      "hidden": true
    },
    {
      "name": "tidb_merge_join_concurrency",
      "hidden": true
    },
    {
      "name": "tidb_metric_query_range_duration",
      "hidden": true
    },
    {
      "name": "tidb_metric_query_step",
      "hidden": true
    },
    {
      "name": "tidb_non_prepared_plan_cache_size",
      "hidden": true
    },
    {
      "name": "tidb_opt_broadcast_cartesian_join",
      "readonly": true
    },
    {
      "name": "tidb_opt_concurrency_factor",
      "readonly": true
    },
    {
      "name": "tidb_opt_copcpu_factor",
      "readonly": true
    },
    {
      "name": "tidb_opt_write_row_id",
      "hidden": true
    },
    {
      "name": "tidb_partition_prune_mode",
      "hidden": true
    },
    {
      "name": "tidb_pessimistic_txn_fair_locking",
      "hidden": true
    },
    {
      "name": "tidb_pprof_sql_cpu",
      "hidden": true
    },
    {
      "name": "tidb_prepared_plan_cache_size",
      "hidden": true
    },
    {
      "name": "tidb_pre_split_regions",
      "readonly": true
    },
    {
      "name": "tidb_rc_read_check_ts",
      "readonly": true
    },
    {
      "name": "tidb_rc_write_check_ts",
      "readonly": true
    },
    {
      "name": "tidb_read_consistency",
      "readonly": true
    },
    {
      "name": "tidb_record_plan_in_slow_log",
      "hidden": true
    },
    {
      "name": "tidb_redact_log",
      "hidden": true
    },
    {
      "name": "tidb_request_source_type",
      "hidden": true
    },
    {
      "name": "tidb_replica_read",
      "readonly": true
    },
    {
      "name": "tidb_restricted_read_only",
      "hidden": true
    },
    {
      "name": "tidb_row_format_version",
      "hidden": true
    },
    {
      "name": "tidb_retry_limit",
      "hidden": true
    },
    {
      "name": "tidb_service_scope",
      "readonly": true
    },
    {
      "name": "tidb_simplified_metrics",
      "readonly": true
    },
    {
      "name": "tidb_skip_missing_partition_stats",
      "readonly": true
    },
    {
      "name": "tidb_slow_log_threshold",
      "hidden": true
    },
    {
      "name": "tidb_slow_query_file",
      "hidden": true
    },
    {
      "name": "tidb_slow_txn_log_threshold",
      "hidden": true
    },
    {
      "name": "tidb_stats_load_pseudo_timeout",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_enable_persistent",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_file_max_backups",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_file_max_days",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_file_max_size",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_filename",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_history_size",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_internal_query",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_max_sql_length",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_max_stmt_count",
      "readonly": true
    },
    {
      "name": "tidb_stmt_summary_refresh_interval",
      "readonly": true
    },
    {
      "name": "tidb_store_limit",
      "readonly": true
    },
    {
      "name": "tidb_streamagg_concurrency",
      "hidden": true
    },
    {
      "name": "tidb_top_sql_max_meta_count",
      "hidden": true
    },
    {
      "name": "tidb_top_sql_max_time_series_count",
      "hidden": true
    },
    {
      "name": "tidb_track_aggregate_memory_usage",
      "readonly": true
    },
    {
      "name": "tidb_txn_assertion_level",
      "readonly": true
    },
    {
      "name": "tidb_txn_commit_batch_size",
      "readonly": true
    },
    {
      "name": "tidb_use_plan_baselines",
      "readonly": true
    },
    {
      "name": "tiflash_compute_dispatch_policy",
      "readonly": true
    },
    {
      "name": "tiflash_replica_read",
      "hidden": true
    },
    {
      "name": "tikv_client_read_timeout",
      "hidden": true
    },
    {
      "name": "tx_isolation_one_shot",
      "hidden": true
    },
    {
      "name": "tx_read_ts",
      "hidden": true
    }
  ],
  "restricted_privileges": [
    "Config",
    "Shutdown",
    "BACKUP_ADMIN",
    "RESTORE_ADMIN",
    "PLACEMENT_ADMIN"
  ],
  "restricted_sql": {
    "rule": [
      "alter_table_attributes",
      "import_with_external_id",
      "select_into_file",
      "import_from_local"
    ],
    "sql": [
      "ALTER PLACEMENT POLICY",
      "ALTER RANGE",
      "CREATE PLACEMENT POLICY",
      "DROP PLACEMENT POLICY",
      "SHOW CREATE PLACEMENT POLICY",
      "SHOW PLACEMENT",
      "SHOW PLACEMENT FOR DATABASE",
      "SHOW PLACEMENT FOR TABLE",
      "SHOW PLACEMENT FOR PARTITION",
      "SHOW PLACEMENT LABELS",
      "CALIBRATE RESOURCE",
      "CREATE RESOURCE GROUP",
      "ALTER RESOURCE GROUP",
      "DROP RESOURCE GROUP",
      "SET RESOURCE GROUP",
      "SHOW CREATE RESOURCE GROUP",
      "BACKUP",
      "RESTORE",
      "SHOW BACKUPS",
      "SHOW RESTORES",
      "BACKUP LOGS",
      "STOP BACKUP LOGS",
      "PAUSE BACKUP LOGS",
      "RESUME BACKUP LOGS",
      "SHOW BACKUP LOGS STATUS",
      "SHOW BACKUP LOGS METADATA",
      "PURGE BACKUP LOGS",
      "SHOW BR JOB",
      "SHOW BR JOB QUERY",
      "CANCEL BR JOB",
      "SHOW BACKUP META",
      "RECOVER TABLE",
      "ADMIN SHOW SLOW",
      "ADMIN PLUGINS DISABLE",
      "ADMIN PLUGINS ENABLE",
      "ADMIN SET BDR ROLE",
      "ADMIN SHOW BDR ROLE",
      "ADMIN UNSET BDR ROLE",
      "ADMIN REPAIR TABLE",
      "ALTER INSTANCE",
      "FLASHBACK CLUSTER",
      "LOAD STATS",
      "SET CONFIG",
      "SHOW CONFIG",
      "SHOW PLUGINS",
      "SHUTDOWN"  
    ]
  }
}`),
}
