FROM node:23.7.0-alpine

RUN npm install -g npm@11.1.0

# Install dependencies with versions
RUN sysctl -w vm.overcommit_memory=1 && \
    apk add --no-cache \
    redis \
    mariadb \
    mariadb-client \
    tmux \
    mariadb-server-utils \
    mariadb-connector-c

# Create non-root user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# Setup MariaDB with proper permissions
RUN mkdir -p /run/mysqld /var/lib/mysql /var/log/mysql && \
    chown -R mysql:mysql /run/mysqld && \
    chown -R mysql:mysql /var/lib/mysql && \
    chown -R mysql:mysql /var/log/mysql && \
    chmod 777 /run/mysqld && \
    chmod 777 /var/lib/mysql && \
    chmod 777 /var/log/mysql && \
    mysql_install_db --user=mysql --datadir=/var/lib/mysql && \
    touch /var/log/mysql/error.log && \
    chown mysql:mysql /var/log/mysql/error.log && \
    chmod 666 /var/log/mysql/error.log

WORKDIR /usr/src/app
COPY package*.json ./
COPY start.sh ./start.sh
COPY . .

RUN npm ci --only=production && \
    chmod +x ./start.sh && \
    chown -R appuser:appgroup .

# Grant necessary permissions to appuser
RUN adduser appuser mysql && \
    chmod 755 /var/lib/mysql && \
    mkdir -p /var/log/mysql && \
    chown -R mysql:mysql /var/log/mysql && \
    touch /var/log/mysql/error.log && \
    chown mysql:mysql /var/log/mysql/error.log

# Grant necessary permissions to appuser
RUN adduser appuser mysql && \
# Give full access to mysql directories
chmod -R 777 /var/lib/mysql && \
chmod -R 777 /run/mysqld && \
chmod -R 777 /var/log/mysql

USER appuser

EXPOSE 80 6379 3306

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD mariadb-admin ping -h localhost || exit 1

CMD ["./start.sh"]