#!/bin/bash

# shellcheck disable=SC1091
source ../e2e/lib/utils

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=tests/qm-ipc/scripts/common
source "$SCRIPT_DIR/common"

info_message "Creating IPC files for mode: ASIL to QM"

# Define file paths for both modes
QMQM_SOCKET=""
QMQM_EXTRA_VOLUME=""
QMQM_SERVER="/etc/qm/containers/systemd/ipc_server.container"
QMQM_CLIENT="/etc/qm/containers/systemd/ipc_client.container"

ASIL_SOCKET="/etc/systemd/system/ipc_server.socket"
ASIL_SERVER="/etc/containers/systemd/ipc_server.container"
ASIL_CLIENT="/etc/qm/containers/systemd/ipc_client.container"
ASIL_EXTRA_VOLUME="/etc/containers/systemd/qm.container.d/10-extra-volume.conf"

# asil to qm
info_message "Cleaning up qm-to-qm files..."
rm -f "$QMQM_SOCKET $QMQM_SERVER $QMQM_CLIENT $QMQM_EXTRA_VOLUME"

SOCKET=$ASIL_SOCKET
SERVER=$ASIL_SERVER
CLIENT=$ASIL_CLIENT
EXTRA_VOLUME="$ASIL_EXTRA_VOLUME"

ENVIRONMENT="Environment=SOCKET_PATH=/run/ipc/ipc.socket"
LISTEN_PATH="%t/ipc/ipc.socket"
VOLUME_PATH="/run/ipc/:/run/ipc/"

# Create ipc_server.socket
info_message "Creating $SOCKET"
cat <<EOF > "$SOCKET"
[Unit]
Description=IPC Server Socket for asil to qm
[Socket]
ListenStream=$LISTEN_PATH
SELinuxContextFromNet=yes

[Install]
WantedBy=sockets.target
EOF

ASIL_VOLUME_DIR="${ASIL_EXTRA_VOLUME%/*}"
mkdir -p "$ASIL_VOLUME_DIR"
info_message "Creating $EXTRA_VOLUME"
cat <<EOF > "$EXTRA_VOLUME"
[Unit]
Requires=ipc_server

[Container]
Volume=$VOLUME_PATH
EOF

info_message "Creating $SERVER"
# Create ipc_server.container
cat <<EOF > "$SERVER"
[Unit]
Description=Demo server service container (asil to qm)
Requires=ipc_server.socket
After=ipc_server.socket
[Container]
Image=quay.io/qm-images/ipc/server
Network=none
$ENVIRONMENT
Volume=$VOLUME_PATH
SecurityLabelType=ipc_t
[Service]
Restart=always
Type=notify
[Install]
WantedBy=multi-user.target
EOF

info_message "Creating $CLIENT"
# Create ipc_client.container
cat <<EOF > "$CLIENT"
[Unit]
Description=Demo client service container (asil to qm)
[Container]
Image=quay.io/qm-images/ipc/client
Network=none
$ENVIRONMENT
Volume=$VOLUME_PATH
SecurityLabelType=qm_container_ipc_t
[Service]
Restart=always
[Install]
WantedBy=multi-user.target
EOF

info_message "systemctl daemon reload..."
systemctl daemon-reload

info_message "restart ipc_server.socket"
systemctl restart ipc_server.socket

info_message "restart ipc_server"
systemctl restart ipc_server

info_message "restarting qm..."
systemctl restart qm

sleep 15

check_container_exists

if podman logs systemd-ipc_server | grep -q "Current time received from client is"; then
    info_message "[PASS] Log entry found"
else
    info_message "[FAIL] Log entry not found"
    exit 1
fi
