# Use the official Node.js 22.4.1 image
FROM node:22.4.1-alpine

# Install Redis and tmux
RUN apk add --no-cache redis tmux

# Set the working directory in the container
WORKDIR /usr/src/

# Copy package.json and package-lock.json (if available)
COPY package*.json ./

# Install application dependencies
RUN npm install

# Copy prisma schema
COPY prisma ./prisma/

# Generate Prisma client
RUN npx prisma generate

# Copy the rest of your application code to the container
COPY . .

# Build the application
RUN npm run build

# Expose the ports your Node.js application and Redis will listen on
EXPOSE 80 6379

# Create a shell script to run Redis, run migrations, and start the application in a tmux session
RUN echo '#!/bin/sh' > /usr/src/start.sh && \
    echo 'redis-server --daemonize yes' >> /usr/src/start.sh && \
    echo 'npx prisma migrate deploy' >> /usr/src/start.sh && \
    echo 'tmux new-session -d -s nodeapp "node dist/server.js"' >> /usr/src/start.sh && \
    echo 'echo "App is running in tmux session. Attach with: tmux attach-session -t nodeapp"' >> /usr/src/start.sh && \
    echo 'tail -f /dev/null' >> /usr/src/start.sh && \
    chmod +x /usr/src/start.sh

# Use the shell script as the entry point
CMD ["/usr/src/start.sh"]