#!/usr/bin/env bash

sudo chown penpot:users /home/penpot

cd ~;

source ~/.bashrc

PENPOT_TMUX_SESSION="penpot"
PENPOT_TMUX_ATTACH="${PENPOT_TMUX_ATTACH:-true}"

function attach_or_exit() {
    if [ "$PENPOT_TMUX_ATTACH" = "true" ]; then
        exec tmux -2 attach-session -t "$PENPOT_TMUX_SESSION"
    fi

    echo "[start-tmux.sh] tmux session '$PENPOT_TMUX_SESSION' is running detached"
    exit 0
}

if tmux has-session -t "$PENPOT_TMUX_SESSION" 2>/dev/null; then
    echo "[start-tmux.sh] Reusing existing tmux session '$PENPOT_TMUX_SESSION'"
    attach_or_exit
fi

# Create the tmux session first so attach-devenv can connect immediately
# even while setup scripts are still running.
tmux -2 new-session -d -s "$PENPOT_TMUX_SESSION"

echo "[start-tmux.sh] Installing node dependencies"
pushd ~/penpot/frontend/
./scripts/setup;
popd
pushd ~/penpot/exporter/
./scripts/setup;
popd

tmux rename-window -t "$PENPOT_TMUX_SESSION:0" 'frontend watch'
tmux select-window -t "$PENPOT_TMUX_SESSION:0"
tmux send-keys -t "$PENPOT_TMUX_SESSION" 'cd penpot/frontend' enter C-l
tmux send-keys -t "$PENPOT_TMUX_SESSION" './scripts/watch app' enter

tmux new-window -t "$PENPOT_TMUX_SESSION:1" -n 'frontend storybook'
tmux select-window -t "$PENPOT_TMUX_SESSION:1"
tmux send-keys -t "$PENPOT_TMUX_SESSION" 'cd penpot/frontend' enter C-l
tmux send-keys -t "$PENPOT_TMUX_SESSION" './scripts/watch storybook' enter

tmux new-window -t "$PENPOT_TMUX_SESSION:2" -n 'exporter'
tmux select-window -t "$PENPOT_TMUX_SESSION:2"
tmux send-keys -t "$PENPOT_TMUX_SESSION" 'cd penpot/exporter' enter C-l
tmux send-keys -t "$PENPOT_TMUX_SESSION" 'rm -f target/app.js*' enter C-l
tmux send-keys -t "$PENPOT_TMUX_SESSION" './scripts/watch' enter

tmux split-window -v -t "$PENPOT_TMUX_SESSION"
tmux send-keys -t "$PENPOT_TMUX_SESSION" 'cd penpot/exporter' enter C-l
tmux send-keys -t "$PENPOT_TMUX_SESSION" './scripts/wait-and-start.sh' enter

tmux new-window -t "$PENPOT_TMUX_SESSION:3" -n 'backend'
tmux select-window -t "$PENPOT_TMUX_SESSION:3"
tmux send-keys -t "$PENPOT_TMUX_SESSION" 'cd penpot/backend' enter C-l
tmux send-keys -t "$PENPOT_TMUX_SESSION" './scripts/start-dev' enter

if echo "$PENPOT_FLAGS" | grep -q "enable-mcp"; then
    pushd ~/penpot/mcp/
    ./scripts/setup;
    pnpm run build;
    popd

    tmux new-window -t "$PENPOT_TMUX_SESSION:4" -n 'mcp'
    tmux select-window -t "$PENPOT_TMUX_SESSION:4"
    tmux send-keys -t "$PENPOT_TMUX_SESSION" 'cd penpot/mcp' enter C-l
    tmux send-keys -t "$PENPOT_TMUX_SESSION" './scripts/start-mcp-devenv' enter
fi

if [ "${SERENA_ENABLED:-false}" = "true" ]; then
    if [ -n "${SERENA_UPDATE_VERSION}" ]; then
        # update Serena (use sudo since the initial Serena installation is global; see Dockerfile)
        sudo -E uv tool install -p 3.13 serena-agent@${SERENA_UPDATE_VERSION} --prerelease=allow
    fi
    tmux new-window -t "$PENPOT_TMUX_SESSION:5" -n 'serena'
    tmux select-window -t "$PENPOT_TMUX_SESSION:5"
    tmux send-keys -t "$PENPOT_TMUX_SESSION" "serena start-mcp-server --transport streamable-http --port 14281 --project penpot --context ${SERENA_CONTEXT} --host 0.0.0.0" enter
fi

attach_or_exit
