#!/bin/bash

CONFIG_FILE="/etc/seekdb/seekdb.cnf"
BASE_DIR="/var/lib/seekdb"

if [ ! -f "$CONFIG_FILE" ]; then
    echo "Error: Configuration file $CONFIG_FILE not found"
    exit 1
fi

ADDITIONAL_PARAMS=""
DATA_DIR=""
REDO_DIR=""

read_config() {
    while IFS= read -r line; do
        [[ -z "$line" || "$line" =~ ^[[:space:]]*# ]] && continue

        key="${line%%=*}"
        value="${line#*=}"

        key="$(echo "$key" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"
        value="$(echo "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')"

        case "$key" in
            "port")
                ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --port=$value"
                ;;
            "base-dir")
                BASE_DIR="$value"
                ;;
            "data-dir")
                ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --data-dir=$value"
                DATA_DIR="$value"
                ;;
            "redo-dir")
                ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --redo-dir=$value"
                REDO_DIR="$value"
                ;;
            *)
                ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --parameter $key=$value"
                ;;
        esac
    done < "$CONFIG_FILE"
}

read_config

if [ -z "$DATA_DIR" ]; then
    DATA_DIR="$BASE_DIR/data"
fi

if [ -z "$REDO_DIR" ]; then
    REDO_DIR="$BASE_DIR/redo"
fi

force_start_with_args=$(echo "$FORCE_START_WITH_ARGS" | tr '[:upper:]' '[:lower:]')
if [ "$force_start_with_args" = "true" ] || [ "$force_start_with_args" = "1" ] || \
   ( ( [ ! -d "$DATA_DIR" ] || [ -z "$(ls -A "$DATA_DIR" 2>/dev/null)" ] ) && \
     ( [ ! -d "$REDO_DIR" ] || [ -z "$(ls -A "$REDO_DIR" 2>/dev/null)" ] ) && \
     [ ! -f "$BASE_DIR/.meta" ] ); then
    CMD="/usr/bin/seekdb --nodaemon --base-dir=$BASE_DIR $ADDITIONAL_PARAMS"
else
    CMD="/usr/bin/seekdb --nodaemon --base-dir=$BASE_DIR"
fi

echo "Starting seekdb with command: $CMD"
echo "Configuration loaded from: $CONFIG_FILE"

exec $CMD
