#!/bin/bash

function cleanedStr(){
	echo $1 | sed 's/^[^a-zA-Z0-9]*//;s/[^a-zA-Z0-9]*$//'
}
# 定义输出的 YAML 文件路径
OUTPUT_YAML="output.yml"
CONFIG_FILE="config.yml"
TEMPLATE_FILE="global.config.yml"
BACKUP_DIR="backup"

# 检查模板文件是否存在
if [[ ! -f $TEMPLATE_FILE ]]; then
  echo "Template file not found: $TEMPLATE_FILE"
  exit 1
fi

# 创建备份目录（如果不存在）
if [[ ! -d $BACKUP_DIR ]]; then
  mkdir -p "$BACKUP_DIR"
fi

# 如果 config.yml 存在，备份到 backup 目录，以时间戳命名
if [[ -f $CONFIG_FILE ]]; then
  TIMESTAMP=$(date +"%Y%m%d%H%M%S")
  BACKUP_FILE="$BACKUP_DIR/config_$TIMESTAMP.yml"
  cp "$CONFIG_FILE" "$BACKUP_FILE"
  echo "Backup created: $BACKUP_FILE"
fi

# 初始化 YAML 文件，用模板文件内容作为开头
cp "$TEMPLATE_FILE" "$OUTPUT_YAML"

# 进入 conf.d 目录，读取所有 CSV 文件
CONF_DIR="conf.d"
if [[ ! -d $CONF_DIR ]]; then
  echo "Directory not found: $CONF_DIR"
  exit 1
fi

# 遍历 conf.d 目录下的 CSV 文件
for csv_file in "$CONF_DIR"/*.csv; do
  # 跳过非文件情况
  [[ -f "$csv_file" ]] || continue

  echo "Processing $csv_file..."

  # 读取 CSV 文件的标题行
  IFS=',' read -r -a headers < "$csv_file"

  # 逐行读取文件内容（从第二行开始）
  tail -n +2 "$csv_file" | while IFS=',' read -r -a values; do
    if [[ ${#values[@]} -ge 2 ]]; then
      # 生成 YAML 格式并追加，使用 values[0] 作为主键
      echo "  - ${values[0]}:" >> "$OUTPUT_YAML"
      
      # 遍历每一列，从第二列开始（跳过第一列），生成键值对
      for i in "${!values[@]}"; do
        if [[ $i -gt 0 ]]; then  # 从第二列开始处理
	    line_key=$(cleanedStr ${headers[$i]})
	    line_value=$(cleanedStr ${values[$i]})
          echo "      $line_key : $line_value" >> "$OUTPUT_YAML"
        fi
      done
    fi
  done

done

# 替换 config.yml
mv "$OUTPUT_YAML" "$CONFIG_FILE"
echo "Config file updated: $CONFIG_FILE"

