set -e

TOTAL_MEM_KB=$(grep MemTotal /proc/meminfo | awk '{print $2}')
TOTAL_MEM_BYTES=$(( TOTAL_MEM_KB * 1024 ))
TOTAL_MEM_MB=$(( TOTAL_MEM_KB / 1024 ))

# --- Mark Cache ---
GB=$(( 1024 * 1024 * 1024 ))
if [ "$TOTAL_MEM_BYTES" -lt $(( 15 * GB )) ]; then
    # Менее 16 GB — консервативно, чтобы не упасть по OOM
    MARK_CACHE=$(( 500 * 1024 * 1024 ))
elif [ "$TOTAL_MEM_BYTES" -le $(( 17 * GB )) ]; then
    # Ровно 16 GB (с небольшим запасом на округления) — 1.5 GB (~10%)
    MARK_CACHE=$(( 1536 * 1024 * 1024 ))
else
    # Более 16 GB — 10% RAM, но в диапазоне [5 GB, 8 GB]
    MARK_CACHE=$(( TOTAL_MEM_BYTES / 10 ))
    MARK_CACHE_MIN=$(( 5 * GB ))
    MARK_CACHE_MAX=$(( 8 * GB ))
    [ "$MARK_CACHE" -lt "$MARK_CACHE_MIN" ] && MARK_CACHE=$MARK_CACHE_MIN
    [ "$MARK_CACHE" -gt "$MARK_CACHE_MAX" ] && MARK_CACHE=$MARK_CACHE_MAX
fi

# --- Query Condition Cache: фиксированно 200MB ---
QCC_SIZE=$(( 200 * 1024 * 1024 ))

echo "=== ClickHouse Cache Configuration ==="
echo "Total RAM: ${TOTAL_MEM_MB} MB"
echo "Mark Cache: $(( MARK_CACHE / 1024 / 1024 )) MB"
echo "Query Condition Cache: $(( QCC_SIZE / 1024 / 1024 )) MB"

# --- Серверный конфиг ---
cat > /etc/clickhouse-server/config.d/caches.xml <<EOF
<clickhouse>
    <mark_cache_size>${MARK_CACHE}</mark_cache_size>
    <query_condition_cache_size>${QCC_SIZE}</query_condition_cache_size>
</clickhouse>
EOF

# --- Профиль пользователя: включаем только query condition cache ---
cat > /etc/clickhouse-server/users.d/cache-profile.xml <<EOF
<clickhouse>
    <profiles>
        <default>
            <use_query_condition_cache>true</use_query_condition_cache>
        </default>
    </profiles>
</clickhouse>
EOF

echo "Config written to /etc/clickhouse-server/config.d/caches.xml"
echo "Profile written to /etc/clickhouse-server/users.d/cache-profile.xml"